परिवर्तन लॉग
क्या नया है.
यह जहाज के रूप में, प्लेटफार्म के हर सुधार.
· kamo-internal
पॉलिसी टैब जोड़ें, और बैकएंड को चैट करने से इनकार कर दिया
एक नियमावली पर चार विचार, क्योंकि चार अलग-अलग प्रश्न हैं और कोई भी लेआउट उन्हें जवाब नहीं देता। नियम क्या प्रत्येक नियम करता है, मैट्रिक्स है क्या संगठन की तरह लग रहा है, सिमुलेटर क्या होता है? लोग, गतिविधि क्या पॉलिसी हर किसी के लिए कर रही है। एक नियम एक वाक्य है, नहीं एक रूप है। एक व्यवस्थापक ने अर्थ को इकट्ठा किया छह लेबल वाली ड्रॉपडाउन अपनी खुद की नीति को गलत तरीके से पढ़ेगा; एक रीडिंग "सेल्स हो सकता है" एक अलग विभाग में हर किसी के साथ चैट नहीं करेगा। प्रत्येक संपादन योग्य वाक्यांश एक चिप है, और वाक्य फ़ंक्शन ऐप / लीब में रहते हैं ताकि वे हो सकें इकाई-परीक्षित -- शब्दावली क्रॉस जो डेटा के बजाय एक सीमा के रूप में डेटा के रूप में अनुवादक, चूंकि विटेस्ट उन्हें नोड वातावरण में चलाता है। एक-तरफा नियम के दो छोरों को अलग-अलग उद्देश्य से कहा जाता है। "सेल्स शुरू हो सकते हैं" इंजीनियरिंग के साथ चैट, जो केवल तभी जवाब दे सकता है जब वह विंडो खुल जाती है" यह बताता है कि इंजन क्या करता है; किसी भी एकल सममित वाक्यांश एक वर्णन करेगा वह नियम जो मौजूद नहीं है। ऑर्डरिंग वह है जो पहले मैच जीत की लागत है, इसलिए बोर्ड इसे नीचे देता है: प्रभाव वास्तव में क्या जीना है, इसके खिलाफ ड्राफ्ट की लगातार जांच की जाती है, छायांकित और डुप्लिकेट नियमों का नाम उन नियमों के तहत रखा गया है जो वे प्रभावित करते हैं, और प्रकाशन शो कितने जोड़े यह बटन से पहले ब्लॉक करते हैं। नए नियम और हर टेम्पलेट आते हैं ऑडिट मोड में, जहां वे रिकॉर्ड करते हैं कि वे क्या अवरुद्ध होंगे और ब्लॉक करेंगे कुछ नहीं। रोस्टर annotated है, फ़िल्टर नहीं किया गया है। एक अवरुद्ध सदस्य अपना नाम, फोटो रखता है और उपस्थिति, और उनके चैट बटन गायब होने के बजाय खुद को बताते हैं। इसके अलावा /api/members/directory बनाता है, जो चैटबॉक्स के ऐड-मेम्बर्स पिकर के पास है क्योंकि यह लिखा गया था -- मार्ग कभी अस्तित्व में नहीं रहा, इसलिए अनुरोध 404'd और संवाद ने किसी समस्या की रिपोर्टिंग के साथ एक खाली सूची प्रदान की।.
· InitializerService
चैट नीति स्कीमा बनाएँ
छह तालिकाओं: संस्करण वाले नियम, इसके नियम और उनके खंड, उत्तर "केवल उनकी खिड़की खुली होने के बावजूद" के पीछे अनुदान देता है, और इसका निशान नीति ने इनकार कर दिया। प्रत्येक कथन को पूरा करने और idempotent करने के लिए लिखा जाता है क्योंकि यह धावक अक्सर इसे चलाने के रूप में हाथ से लागू किया जाता है। इस रेपो को धक्का देना -- वहाँ कोई CI और कोई कार्यभार नहीं है - जबकि मीडिया सर्विस और सुरक्षा सेवा दोनों ddl-auto:none चलाने के लिए, इसलिए कुछ भी नहीं अपने स्टार्टअप पर इन तालिकाओं को बनाता है। अगर डीडीएल पहले नहीं उतरा है, उन सेवाओं को स्वच्छ रूप से तैनात किया गया है और फिर फेंक दिया गया है। प्रत्येक पॉलिसी को पढ़ा जाता है। इस बदलाव के लिए डीडीएल को दोनों सेवा धक्का से पहले यूगाबाइट पर लागू किया गया था, और इसके बजाय इंजन के अपने दो स्नैपशॉट प्रश्नों को चलाने के द्वारा सत्यापित सूची की जाँच करके। साथ में परीक्षण इन बयानों को प्रतिबिंब द्वारा तुलना करता है। शुरुआती के अंदर हाइबरनेट पहले संस्थाओं से टेबल बनाता है कोई भी धावक निष्पादित करता है, इसलिए यहां लापता एक स्तंभ इस तरफ अदृश्य है और दूसरे पर घातक।.
· SecurityService
अपने चैट नीति फैसले के साथ सदस्य रोस्टर कोनोटेट करें
सुरक्षा सेवा chat UI को रोस्टर प्रदान करती है, इसलिए इसे बनाया जाना चाहिए। उसी फैसले के साथ जवाब मीडिया सर्विस - एक साझा के साथ लागू होती है इवैलुएटर, या उत्पाद बातचीत प्रदान करता है तो बैकेंड मना कर देता है और यह एक नीति के बजाय एक टूटे हुए चैट के रूप में पढ़ता है। रोस्टर कभी फ़िल्टर नहीं किया जाता है। एक सदस्य अपने पॉलिसी ब्लॉक को रखता है नाम, फोटो और उपस्थिति और केवल चैट वहन खो देता है, जो तब होता है संगठन की अपनी व्याख्या। उन्हें छिपाना कम काम करना होगा और यहीं काम करने वाले रोस्टर को झूठ बोलना होगा। पूरे रोस्टर के लिए फैसले एक कैश्ड स्नैपशॉट को पास करने के लिए। प्रत्येक सदस्य को पूछते हुए मूल्यांकन किया जाएगा - और एक ठंडे कैश पर, एक क्वेरी - एक लूप के अंदर जो पहले से ही प्रति सहयोगी एक बार चलता है। एक पॉलिसी पढ़ने में विफल रहता है हर पंक्ति को छोड़ने के बजाय रोस्टर को विफल करने के लिए: भेजने का रास्ता है अभी भी अधिकार, इसलिए लागत एक सीमित क़ानून है, न कि एक अप्रबलित नीति.
· MediaService
ऑर्ग चैट नीति को लागू करें, और दो छेदों को बंद करें जो उस पर बैठे थे
तीन स्थानों पर एक बातचीत शुरू हो सकती है या जारी रख सकती है: सत्र निर्माण, सदस्य जोड़ता है, और भेजने का रास्ता। एक कमरा पुलिस द्वारा जोड़ी नहीं है जोड़ी - आमंत्रित गेट प्रत्यक्ष संदेश गेट है, इसलिए आप किसी को ला सकते हैं वास्तव में जब आप उन्हें संदेश दे सकते हैं, और एक कमरा जो सिकुड़ता है वापस दो अवरुद्ध सदस्यों के लिए एक सीधा संदेश के रूप में फिर से पढ़ने के लिए है। इस काम के तहत दो पूर्ववर्ती छेद सीधे थे और इसके साथ तय किए गए हैं। भेजे गए समापन बिंदु की कभी जांच नहीं की कि प्रेषक सत्र से संबंधित है, इसलिए कोई भी प्रमाणित सदस्य किसी भी सत्र में पोस्ट कर सकते हैं, वे अनुमान लगा सकते हैं - एक पॉलिसी गेट इसके बिना सजावटी रहा होगा। और टाइपिंग संकेतक थे एक नंगे / विषयिक / चैट / टाइपिंग के लिए प्रकाशित किया गया है कि हर जुड़े ग्राहक में संगठन को सब्सक्राइब करना; उन्हें प्रति सत्र में स्कोप करना लीक को रोकता है और रुक जाता है एक दूसरे के लिए संकेत से अलग जोड़ी। उत्तर दें "केवल तभी अनुदान देता है जब उनकी खिड़की खुली है": ब्राउज़र रिपोर्ट क्या यह देख सकता है और सर्वर निर्णय लेता है, एक अनुग्रह के साथ जो एक याद रहता है बंद लैपटॉप मत करो। उनका प्रसारण सदस्य और संरक्षित है क्योंकि एक जाली अनुदान एक संगीतकार को बंद कर दिया पॉलिसी अनलॉक करेगा। व्यवस्थापक लिखने का अपना खुद का बीन और उसके स्वयं का लेनदेन है। YugabyteDB पर एक पढ़ा एक लेन-देन में लिखने के बाद 40001 उठता है और इसके चारों ओर सब कुछ जमा करता है। और एक आत्म-प्रेरित @transactional सब पर एक सीमा नहीं है - इसलिए बचा पढ़ता है पहले, लिखते हैं, और फिर पढ़ने के लिए केवल एक बार यह प्रतिबद्ध है।.
· kamo-shared-library
ऑर्ग चैट नीति इंजन जोड़ें
यह तय करता है कि कोई सदस्य दूसरे के साथ बातचीत कर सकता है या नहीं, और क्या वे मौजूद एक में भेज सकते हैं। आदेश पर नियम एक आदेशित सूची हैं जोड़े और पहला मैच तय करता है, इसलिए हर फैसले के नाम बिल्कुल एक नियम -- क्या सेटिंग्स यूआई को एक पूछने के बजाय खुद को समझाने देता है व्यवस्थापक को यह विश्वास करना। अभिविन्यास नियम लोड-असर हिस्सा है। एक नियम ने SUBJECT लिखा -> टारगेट दोनों सिरों से मूल्यांकन किया जाता है: आगे अभिनेता पक्ष यह से लिखा है, इसके बारे में लिखा गया है। उसके बिना, "सेल्स संदेश कर सकते हैं इंजीनियरिंग एक तरह से मैच होगा जब एक विक्रेता कार्य करता है और गिर जाता है जो कुछ भी नीचे बैठता है जब एक इंजीनियर करता है - केवल कुछ भी नहीं करना यह प्रतिबंध लगाने के लिए मौजूद है। अनुपस्थिति कभी समझौता नहीं है। एक विभाग, शीर्षक या प्रबंधक खंड मैच नहीं कर सकता एक सादे सदस्य, और लापरवाही शॉर्ट सर्किट नेगेशन से पहले, इसलिए "बिक्री में नहीं" हर ग्राहक में स्वीप नहीं करता है जिनके पास कोई विभाग नहीं है। इवैलुएटर में कोई प्रस्ताव नहीं है और कोई सत्र नहीं खुलता है: दो प्रश्न एक बनाते हैं प्रति-org स्नैपशॉट, और उसके बाद हर फैसले अंकगणित सेट है। हल करना जेपीए के माध्यम से प्रबंधक श्रृंखला प्रति सदस्य के लिंक पर एक क्वेरी होगी जब भी कैश ठंडा हो जाता है, तब तक चलने वाले रास्ते पर।.
· kamo-internal
टैब और पेंट बाइंडर्स और अपलोड को फिर से व्यवस्थित करें
स्ट्रिप ने ओरिजिनलों को संशोधित किया (Common | Binders ) दस्तावेजों के तीन विचारों और उनके बाद दो गंतव्यों। Binders and uploads अब ले जाते हैं कि दृष्टि से पढ़ने: भूरे और नीले व्हाइट लेबल और आइकन के साथ पृष्ठभूमि। पेंट टैब में `&&&` लोड-असर है। माता-पिता टैब अपने बच्चों को शैलियों `&MuiTab-root` के माध्यम से, एक अवरोही चयनकर्ता जो प्रति-tab पर एक सादे रन बनाए sx, इसलिए एक `&` कैस्केड खो देता है और लेबल नए पर ग्रे रहता है पृष्ठभूमि.
· kamo-internal
जब एक चयनित दस्तावेज़ जोड़ा नहीं जा सकता
चयनित डॉक्स बाइंडर एक दस्तावेज़ को छोड़ देता है जो कानूनी रूप से नहीं बल्कि कानूनी रूप से पकड़ सकता है। पूरे सिंक को विफल करना, जो सही है - लेकिन यह चुपचाप किया, इसलिए एक बाइंडर सदस्य की तुलना में कम दस्तावेज़ पकड़े गए फीचर के रूप में पढ़ा गया टूट गया, और एकमात्र ऐसा कारण अस्तित्व में था डॉक्स सर्विस लॉग।.
· kamo-internal
Binders में संशोधित टैब को मोड़ो
यह पट्टी अब मूल है। संशोधित करना चला गया: सब कुछ यह किया - चेक किए गए दस्तावेजों की व्यवस्था, उन्हें पूर्वावलोकन, विलय उन्हें एक पीडीएफ या एक ZIP में - आयोजक पहले से ही बेहतर था, और इसने इसे किया एक सूची के लिए आप रख सकते हैं। उन्हें क्या जोड़ता है एक पिन्ड "चयनित डॉक्स" प्रविष्टि है जो बाइंडर के शीर्ष पर है सूची यह ग्रिड में जो कुछ भी चेक किया जाता है उसे पकड़ लेता है और हर बार फिर से लिखा जाता है। चयन परिवर्तन, इसलिए एक सदस्य मूल में दस्तावेजों की जांच करता है, बाइंडर्स को खोलता है, और उन्हें वहाँ क्रम में पता चलता है। इसे बदला नहीं जा सकता, हटाया या साझा किया जा सकता है; बटन जो इसे बचाता है, "Save As Binder", वही डुप्लिकेट संपादक है पहले से ही, relabelled - किसी अन्य बाइंडर पर यह "डुप्लिकेट यह" पढ़ता है बिंदर (Binder) और दोनों सदस्य के अपने पकड़े हुए सब कुछ का एक नया बाइंडर बनाते हैं। खुला रहता है। अब merged PDF के साथ ZIP प्रदान करता है, जो है आखिरी बात यह है कि संशोधित टैब ऐसा कर सकता है कि एक बाइंडर नहीं हो सकता है। संशोधित ड्रॉप प्रकाशितविस्तार के साथ अंतर, दो दस्तावेजों द्वारा पक्ष पक्ष, और टूलबार की मृत "प्रीपर एंड डाउनलोड" बटन अब बाइंडर को खोलता है इसका लेबल हमेशा वर्णन किया गया था।.
· DocsService
चयनित डॉक्स बाइंडर को सेवा और सिंक करें
POST/api/docs/binders/scratch ने कॉलर के चयनित डॉक्स बाइंडर को उनके लिए भेजा है। एक संग्रह, इसे पहले उपयोग पर बनाता है, और अपने दस्तावेज़ों को पहले उपयोग के साथ बदल देता है। एक ही राउंड ट्रिप में ग्रिड चयन - आयोजक इस पर कॉल करता है चयन परिवर्तन, और प्रति चेकबॉक्स दो कॉल एक बीच अंतर है बांधने वाला जो ग्रिड के साथ रहता है और वह जो संभवतः इसे अंतराल करता है। सिंक प्रत्येक अभी भी चयनित दस्तावेज़ को उस स्थिति में रखता है जब सदस्य इसे व्यवस्थित और नए लोगों को नियुक्त करना; विभाजक और उत्पन्न पृष्ठ हैं कभी नहीं छू, क्योंकि वे सदस्य के अपने परिवर्धन के बजाय एक के बजाय हैं ग्रिड का प्रतिबिंब। एक दस्तावेज जो कानूनी रूप से बाइंडर में शामिल नहीं हो सकता है पूरे सिंक को विफल करने के बजाय छोड़ दिया - एक ग्रिड चयन को ठीक नहीं किया जाता है, इसलिए एक बुरी पंक्ति अन्य बीस को पहुंचने से रोक नहीं सकती है। आदेश नियम एक शुद्ध कार्य हैं इसलिए उन्हें डेटाबेस के बिना परीक्षण किया जा सकता है। नाम बदलने, हटाने, साझा करने और टेम्पलेट प्रचार के लिए मना कर दिया जाता है, और नियम क्या हो सकता है के लिए एक DOC आइटम अब एक सहायक में रहते हैं तो हाथ से जोड़ और वे क्या स्वीकार करते हैं, इसके अलावा सिंकिंग नहीं है।.
· InitializerService
जोड़ें बाइंडर.is scratch
एक के बजाय चार बयान ALTER: बाँधने वाले पॉप्युलेट होते हैं, और Yugabyte पूरे ADD COLUMN को अस्वीकार करता है ... खंड के बजाय NULL बयान नहीं, इसलिए स्तंभ nullable आता है, backfilled है, अपने DEFAULT लाभ, और उसके बाद ही कड़ा हुआ है। प्रति स्तंभ-add सम्मेलन — साझा-lib इकाई अब मानचित्र is scratch, इसलिए कोई भी धावक जो इस पर मरने से पहले एक बाइंडर को लोड करता है एक स्तंभ जो अभी तक मौजूद नहीं है।.
· kamo-shared-library
सदस्य के ऑटो-प्रबंधित चयनित डॉक्स बाइंडर को चिह्नित करें
बाइंडर.is scratch एक बाइंडर प्रति (स्वामी, संग्रह) को ध्वजांकित करता है जिसका दस्तावेज़ एक क्यूरेट सूची के बजाय डॉकमैनेजर ग्रिड चयन हैं। यह है प्रत्येक अन्य सम्मान में एक साधारण बाइंडर, इसलिए सूची क्वेरी को इसे बाहर करना पड़ता है हाथ से: आयोजक ने इसे सूची के ऊपर पिन किया और इसे छोड़ने से इसे डाल दिया जाएगा। वहाँ दो बार और - बदतर — यह प्रत्येक "बाइंडर" पिकर में प्रदान करते हैं। लुकअप एक वैकल्पिक के बजाय एक सूची लौटाता है क्योंकि दो टैब खोलने के लिए आयोजक एक साथ दोनों याद और दोनों सम्मिलित हो सकते हैं; कॉलर सबसे पुराना लेता है।.
· kamo-internal
इसे एक स्पिनर के पीछे रखने के बजाय लीड रिकॉर्ड इकट्ठा करें
विवरण टैब का लोडिंग स्टेट चौदह ग्रे MUI पल्स पंक्तियों का एक कार्ड था - एक आकार के फलक कभी नहीं लेता है, एक प्रति एलिमेंट घड़ी पर, एक थोक द्वारा बदल दिया यह कुछ भी नहीं दिखता है। और यह `loading.insights` पर इंतजार: एक रिकॉर्ड है कि पहले से ही प्लेसहोल्डर के पीछे एक असंबंधित संचार तक पहुंच गया था गिनती वापस आ गई। अब पनीर अपने खुद के लेआउट को दर्शाता है जबकि यह इंतजार करता है - चार स्टेट टाइल्स, कॉलबैक स्ट्रिप, तीन कार्डों की दो पंक्तियां, वास्तविक चौड़ाई पर - एक बैंड के तहत ब्रांड प्रकाश एक विकर्ण पर पृष्ठ को पार करने के लिए, और असली कार्ड बंद हाथ उसी क्रम पर उनके भूतों से, इसलिए रिकॉर्ड पथ के साथ हल करता है प्रकाश यात्रा। केवल रिकॉर्ड फलक को गेट करता है; गिनती और कार्य सूची अपने स्वयं के टाइलों के अंदर हल करें, और बाजार के पंख प्रवेश द्वार का विस्तार करते हैं जब इसकी कॉन्फ़िगरेशन भूमि होती है तो ऑर्डर करें। मास्टहेड एक ही अनुक्रम में शामिल होता है: शब्द के बजाय एक नाम के आकार का भूत "लोडिंग", और इसके नीचे के किनारे पर एक तीन सेगमेंट रेल - रिकॉर्ड, गतिविधि, विन्यास - जहां एक खंड उस पल को सफेद कर देता है जो उसकी भूमि ले लेता है। असली आगमन, टाइमर नहीं। यह बिल्कुल तैनात है इसलिए टैब अंडरलाइन रहता है यह लेबल सामग्री के साथ फ्लश। एक कंकाल जो कभी हल नहीं करता है वह सबसे खराब अंत राज्य है, जिसमें लोडिंग डिज़ाइन है, इसलिए एक असफल रिकॉर्ड अब क्या हुआ और एक रेट्री के लिए रास्ता देता है जो फिर से रन करता है उद्घाटन प्राप्त होता है, विवरण और बंधक टैब दोनों पर। `kmail-*` choreography in Globals.css घर `kload-*` परिवार हो जाता है - समान नियम, समान कम गति अनुबंध, प्लस `kload-settle` handoff के लिए और रेल के खंड। / संदेश, /नोट्स और /नेटवर्क अपरिवर्तित पर चलते हैं। कोई नया i18n कुंजी नहीं है।.
· SecurityService
एक लीड के पिछले ई-मेल को वापस भरने के लिए ईमेल सेवा से पूछें
साझा पुस्तकालय के LeadEmailbackfillTrigger को लागू करता है, इसलिए "Associate" पर क्लिक करना एक लीड सेव पर पिछले ई-मेल डब्ल्यू / लीड एकमात्र सेवा तक पहुंचता है जो पढ़ सकते हैं मेलबॉक्स लीड सर्विस के बजाय दो खतरों को संभाला गया। यह प्रतिबद्ध है: संपर्क बिंदु के खिलाफ बैक-फिल मैच बचा अभी भी लेखन है, और फायर इनलाइन यह एक पंक्ति के खिलाफ चला जाएगा, फिर भी कोई अन्य कनेक्शन नहीं देख सकता है, ढूंढें कुछ भी नहीं, और सफलता की रिपोर्ट करें। और यह कभी सदस्य को इंतजार नहीं करता है: यहां तक कि स्वीकार करना नौकरी किसी अन्य सेवा के लिए एक हॉप है जो नीचे हो सकता है, इसलिए यह एक पर बाहर चला जाता है शॉर्ट टाइमआउट के साथ पृष्ठभूमि धागा। सबसे खराब परिणाम उपलब्ध सदस्य एक लीड है जो सामान्य रूप से बचाया जाता है।.
· EmailService
अनुरोध पर लीड के पिछले ई-मेल के लिए ऑर्ग के मेलबॉक्स को स्कैन करें
"Associate past E-mails w/ Lead" tick-box. एक लीड और लीड देना केवल उस पर दर्ज किए गए पते पर, प्रत्येक मेलबॉक्स में INBOX और Sent को पढ़ा, जिसमें प्रत्येक मेलबॉक्स में शामिल किया गया है। लीड्स संगठन एक वर्ष वापस आ गया और कुछ भी पता ले जाने के लिए संलग्न। प्रत्येक गार्ड स्वचालित पथ अभी भी लागू होता है, क्योंकि दोनों पथ अब एक वर्गीकरण साझा करें (): एक ऑर्ग जिसके पते को वर्गीकृत नहीं किया जा सकता है, मना कर दिया गया है, एक पूरी तरह से आंतरिक धागा मना कर दिया है, और एक कंपनी का पता कभी एक मैच नहीं है उम्मीदवार - इसलिए एक लीड पर बॉक्स को टिकना जिसके ई-मेल noreply@<org-domain> अभी भी कंपनी के पूरे मेल का नेतृत्व करने के बजाय कुछ भी नहीं जोड़ता है धारा। उनमें से सबसे ऊपर, लीड का अपना पता वास्तव में होना चाहिए संदेश अनुरोध धागे और सिंगल-थ्रेडेडेड को बंद कर देता है: एक संपूर्ण संगठन मेलबॉक्स एक लीड सेव की तुलना में लंबे समय तक पढ़ते हैं, जिसके लिए ब्लॉक हो सकता है, और मेल सर्वर पूरे पॉड के लिए प्रति उपयोगकर्ता के केवल एक मुट्ठी कनेक्शन की अनुमति देता है, इसलिए यहां की सहमति तेजी से बढ़ने के बजाय लाइव स्वीप को भूखा बना देगी। The समापन बिंदु जवाब 202 "queued", कभी नहीं "कुछ पाया" - सदस्य देखता है ईमेल टैब भरना। फ़ोल्डर चयन MailboxFolderScope के लिए चला जाता है तो स्वीप और बैक-फिल जहां मेल जीवित रहता है, उस समय की एक समयसीमा जिसका विषय उस पर निर्भर करता है। पथ में पाया गया कि पहला संदेश भी इससे ज्यादा खराब होगा।.
· kamo-shared-library
अपने ई-मेल पते की भविष्यवाणी करने वाले लीड दावा मेल को दें
मैचिंग पॉइंट-इन-टाइम डिज़ाइन है - एक संपर्क बिंदु केवल यातायात का दावा करता है अपनी खिड़की के अंदर, इसलिए एक लीड को संपादित करने से इतिहास को फिर से लिखा नहीं जा सकता है। The लागत यह है कि बातचीत शुरू होने के बाद एक प्रमुख प्रवेश कभी नहीं दिखा सकता है कि बातचीत, और सदस्य को कहने का कोई तरीका नहीं है "यह पता पहले से ही था उनके LinkHistoric is that way. यह वास्तव में एक चीज, खिड़की और कुछ भी नहीं चौड़ा करता है और: पता अभी भी उस सटीक नेतृत्व का एक संपर्क बिंदु होना चाहिए, उस में सटीक org, कुछ विंडो में। यह एक मैच का आविष्कार नहीं कर सकता है, एक किरायेदार को पार कर सकता है, या एक तक पहुंच सकता है। लीड जो कभी भी पता नहीं था - परीक्षण उनमें से प्रत्येक पिन, क्योंकि सभी तीन चुपचाप विफल होते हैं, क्योंकि गलत लीड से जुड़े मेल एक लीड के रूप में पढ़ते हैं जो वास्तव में हम पर लिखते थे। लीड सर्विस उस सीम को प्राप्त करती है जो सदस्य के इरादे से गुजरती है (एक वैकल्पिक) लीडईमेलबैकफिलट्रिगर, बिना मेल एक्सेस के सेवाओं में अनुपस्थित है और दोनों अनुरोध डीटीओ ध्वज प्राप्त करते हैं। झंडा जानबूझकर बनी नहीं है: यह एक सेव का वर्णन करता है, और हर मौजूदा कॉलर - आयात, सेवन समापन बिंदु, MeridianLink पैच, लॉक स्वीपर की ऑटो सेव - कुछ भी नहीं भेजता है और इसलिए इसके लिए कभी नहीं पूछा गया कोई मेलबॉक्स स्कैन प्राप्त करें।.
· kamo-internal
जब लीड का पता सेट हो जाता है तो ई-मेल को जोड़ने की पेशकश करें
मेल एक लीड सख्ती से प्वाइंट-इन-टाइम से मेल खाता है: एक पता केवल दावा करता है उस समय से यातायात को रिकॉर्ड किया जाता है, ताकि आज एक लीड को संपादित किया जा सके पिछले सप्ताह कौन से मेल लिखा गया था। यह स्वचालित पथ के लिए सही है और अगर कोई सदस्य वास्तव में हिट करता है - एक लीड में प्रवेश करने के लिए वे पहले से ही ई-मेल कर दिया गया, फिर ईमेल टैब खाली और धागे को स्पष्ट रूप से ढूंढना खो गया। तो दोनों जगहों पर एक लीड का अपना पता सेट किया जा सकता है - संपर्क फलक पर /leads/view/{id} और नए प्रमुख रूप - अब एक unticked "Associate past" दिखाने ई-मेल w/ लीड यह बात सर्वर को देखने के लिए पूछती है; इसे अकेले छोड़ देना कुछ नहीं बदलता है। केवल एक बार एक एड्रेस दिखाई देता है टाइप किया गया, कभी याद नहीं किया जा रहा है: यह एक बचाने का वर्णन करता है, नहीं नेतृत्व, इसलिए यह बनी नहीं है और व्हाइटलिस्ट बिल्डर इसे पूरी तरह से गलत मानते हैं झूठी भेजने के बजाय लॉक स्वीपर की ऑटो सेव को फिर से खेलना होगा विकल्प.
· kamo-internal
असाइनमेंट, आरक्षण और फिल्टर के लिए एक एजेंट पिकर
लीड्स असाइनमेंट फलक पर असाइन एजेंट नियंत्रण एक स्थानीय घटक था LeadViewClient. दो अन्य स्थानों में यह वास्तव में चाहता था, इसलिए यह चल जाता है ************* और इसके साथ पिकर संवाद लेता है। असाइनमेंट फलक को देखने और व्यवहार में अपरिवर्तित किया जाता है - यह अभी तक मालिक नहीं है कोड रिजर्व अवसर - एक सदस्य EDIT OPPORTUNITIES पकड़ता है, अधिकार है कि गेट्स / लीड्स / अवसर / आरक्षण के अवसरों को प्रबंधित करना अब बिक्री एजेंट हो जाता है फ़ील्ड नामकरण कौन आरक्षण के लिए है। यह खुद को खोलता है, इसलिए उसे दाखिल करना अपने अनुरोध की लागत अतिरिक्त नहीं है। लीड के निर्दिष्ट एजेंट के विपरीत यह नहीं किया जा सकता खाली: आरक्षण किसी का दावा है, और एक अज्ञात राज्य नहीं है रिकॉर्ड पकड़ सकता है। यह `clearable={false}` का पूरा है - पर कोई स्पष्ट बटन नहीं क्षेत्र, और पिकर में कोई निकालें नहीं। / लीड्स एजेंट फिल्टर पूरे स्टाफ के एक भाग द्वारा एक चयनित खिलाया गया था निर्देशिका, जहाँ से इसका विकल्प आया और क्यों यह केवल कभी भी पेशकश कर सकता है एक ओरग का एक पृष्ठ जो लोगों के पांच आंकड़े चला सकता है। यह उसी पर चलता है पिकर, जो एक समय में एक पृष्ठ की खोज करता है, इसलिए फ़िल्टर अब हर नाम तक पहुंच सकता है - और पूरे दिशा में लाने के लिए, इसके मॉड्यूल कैश और इसके सक्रिय फिल्टर चले गए हैं इसके साथ ही, पहले से ही असाइनमेंट फलक की सफाई की गई। उस फिल्टर के उपयोगी उत्तरों में तीन शामिल हैं जो लोग नहीं हैं, इसलिए MemberPickerDialog बढ़ता है `quickOptions`: पंक्तियों ने परिणामों के ऊपर पिन किया, यहां सबसे पहले, फिर ऑल लीड्स, फिर किसी सदस्य के लिए असाइन लीड्स को देखने की अनुमति दी गई। उन Myself lead क्योंकि यह उत्तर अक्सर चाहता था और एक एक निर्देशिका खोज पहुँचना मुश्किल बनाता है - अन्यथा आप अपना खुद का नाम टाइप करते हैं और खुद को नामों में से चुनें। **************** sinels लीडग्रिड क्वेरी के बगल में चलते हैं मानचित्रण जो उन्हें पढ़ता है। वे दोनों स्थानों में स्ट्रिंग साक्षर थे, और एक दोनों के बीच बहाव संकलन में विफल नहीं होगा: क्वेरी का इलाज करेगा एक सदस्य आईडी के रूप में अनजाने में भेजे गएसेल को फ़िल्टर करें, किसी सदस्य को फ़िल्टर करें, और एक दिखाना खाली ग्रिड - जो एक बग के बजाय "आप की कोई सुराग नहीं है" के रूप में पढ़ता है। सत्र में एक सदस्य आईडी और एक ईमेल होता है लेकिन कोई डिस्प्ले नाम नहीं होता है, इसलिए बीज देना "आप" के साथ आरक्षित फॉर्म निर्देशिका खोज के माध्यम से इसे एक बार हल करता है। मैच सदस्य आईडी पर है, कभी भी उस ईमेल पर नहीं जो पृष्ठ का निर्माण करता है: एक साझा मेलबॉक्स कई लोगों को लौटाता है, और पहले लेने से एक के लिए एक अवसर मिल जाएगा जो कभी इसके लिए पूछता है। इसके अलावा, getAgent FilterMemberId को छोड़ देता है, जिसमें कोई कॉलर और parseInt नहीं था। 19-अंक सदस्य आईडी।.
· SecurityService
किसी अन्य एजेंट के लिए आरक्षण स्वीकार करें
POST **************** अब BehalfOfMemberId पर सम्मान करता है, EDIT OPPORTUNITIES पर गेट किया गया - यह अधिकार है कि गेट्स पर अवसरों का प्रबंधन करते हैं आरक्षित सूची, और पहले से ही एजेंट के बीच एक अवसर स्थानांतरित करने के लिए आवश्यक अधिकार तथ्य के बाद। CREATE OPPORTUNITIES अकेले अभी भी केवल अपने ही फाइल करता है। इसके बिना एक कॉलर जिसका नाम किसी एजेंट को क्षेत्र के बजाय REFUSED किया जाता है गिरा दिया। चुपचाप अपने नाम के तहत आरक्षण रिकॉर्डिंग विशेषता होगी किसी ऐसे व्यक्ति को दावा करना जो इसे कभी नहीं बनाया था, और प्रबंधक को एक अनुरोध दिखाना होगा जो उन्होंने कभी नहीं किया था। वे किसी और के लिए दायर विश्वास करते हैं। नामित एजेंट कमीशन के खिलाफ मान्य हैEligibleMemberIds — वही View LEADS पूल लागूप्राथमिक एजेंट का उपयोग करता है और वही पूल पिकर प्रदान करता है। किसी ऐसे व्यक्ति पर आरक्षण करना जो लीड को नहीं खोल सकता है, यह आरक्षित है उनके लिए काम करने योग्य। इतिहास पंक्ति का अभिनेता उस व्यक्ति को रहता है जो अभिनय करता है; नोट कहता है कि यह किसके लिए था। इसलिए क्योंकि REQUEST SUBMITTED स्वीकृतिकर्ता के लिए जाता है, एजेंट इसे दायर किया गया था। स्पष्ट रूप से जोड़ा गया - वे एक स्वीकृतिकर्ता नहीं हैं, इसलिए अन्यथा वे पहले होंगे उनके नाम पर दावा सुनना इसकी मंजूरी या इनकार है। की आवश्यकता है KamoInitializerसेवा प्रवासन जोड़ने CREated BY MEMBER ID to have पहली बार, या किसी भी आरक्षण फेंकने का पहला पढ़ा।.
· InitializerService
*************
रिकॉर्ड्स जिन्होंने आरक्षण दायर किया था, जब वह एजेंट नहीं है, तो ऐसा कोई व्यक्ति प्रबंध अवसर रिकॉर्ड के बिना बिक्री एजेंट की ओर से एक बढ़ा सकते हैं यह दावा करने के लिए कि एजेंट ने खुद ही किया था। कोई backfill के साथ nullable, कारण PRIMARY AGENT MEMBER ID ने नहीं लिया: null इसका मतलब है "निवेदनकर्ता ने इसे स्वयं दायर किया", हर पंक्ति ने इस स्तंभ की भविष्यवाणी की वास्तव में आत्म-filed था, और अनुरोधकर्ता की प्रतिलिपि एक तथ्य का आविष्कार करेगी और इतिहास पर एक "फाइल्ड बाय" लाइन डालें, जिसमें कोई भी प्रदर्शन नहीं करता है। कोई सूचकांक नहीं - उस पर कुछ भी फिल्टर या सॉर्ट नहीं, इसलिए हर तरह के लिखने और खरीदने का खर्च होगा। नहीं पढ़ा। इसे तैनात किया जाना चाहिए और इसे चलाने के लिए सुरक्षा सेवा परिवर्तन से पहले कि नक्शे कॉलम: सेवाएं ddl-ऑटो: कोई नहीं, और हाइबरनेट नाम हर मैप्ड कॉलम में इसके SELECT, इसलिए सेवा स्वस्थ शुरू हो जाएगी और फिर पहले पढ़ने पर फेंक दें किसी भी आरक्षण का।.
· kamo-shared-library
एक प्रबंधक को एक एजेंट के लिए आरक्षण करना चाहिए
कुछ लोग जो अवसरों का प्रबंधन करते हैं, अब बिक्री पर आरक्षण अनुरोध दायर कर सकते हैं एजेंट की ओर से। रिज़र्वेशनरीक्वेस्ट ने इसके लिए बेहाल्फ ओएफ सदस्य आईडी पर काम किया। नामित एजेंट REQUESTED BY MEMBER ID हो जाता है, वह व्यक्ति नहीं जिसने इसे दायर किया। उस स्तंभ से प्रत्येक डाउनस्ट्रीम नियम कुंजी - जो एक एक्सटेंशन के लिए पूछ सकता है, जो आयोग का अनुसरण करता है, आरक्षित सूची के एजेंट फ़िल्टर मैच क्या है - इसलिए दावा करना है कि वे कहाँ दिखते हैं, और वास्तव में यह एजेंट का दावा है। कीबोर्ड पर कौन बैठा एक नया CREated BY MEMBER ID में बजाय होने के बजाय चला जाता है एक ही स्तंभ में मुड़ा हुआ, इसलिए न तो तथ्य को दूसरे से प्रभावित होना चाहिए। Nullable, और null अपने अर्थ रखता है: अनुरोधकर्ता ने इसे स्वयं दायर किया। PRIMARY AGENT MEMBER ID जानबूझकर इस रास्ते पर शून्य छोड़ दिया है। इसका मतलब है "एक" अनुमोदनकर्ता ने इस एजेंट को छोड़ दिया, और आरक्षित सूची में एक प्रस्ताव प्रस्तुत किया गया है। इसके लिए "Reassigned from" लाइन - लेकिन एक एजेंट के लिए दायर अनुरोध कभी नहीं था किसी को ले जाया गया, इसलिए `Ressigned` झूठे रहता है और `OnBehalfOf` सच कहता है इसके बजाय चीज़।.
· kamo-internal
शेष नियंत्रण को छिपाएं जो मुफ्त में सभी का उपयोग नहीं कर सकते
क्रेडिट बैलेंस, डेली एलोटमेंट और मैक्स बैलेंस सभी प्रदान की गई शेष राशि पर कार्य करते हैं। और एक FFA उत्पाद में कोई नहीं है - वहाँ मिनट स्वीकार करते हैं और अपने क्रेडिट खर्च करते हैं। उन्हें संपादित करने के लिए एक प्रबंधक को उन संख्याओं को सेट करने के लिए आमंत्रित किया जो कभी बाध्य नहीं हो सकते थे। वे अब एक टूलटिप के साथ एक muted चिप के रूप में प्रस्तुत करते हैं। मैक्स डेली खर्च रहता है संपादन योग्य और एफएफए उत्पाद पर वास्तविक लीवर है: बैकएंड अब एक गिनती करता है FFA स्वीकृति एक खर्च के रूप में, इसलिए टोपी भी लागू होती है।.
· kamo-shared-library
मुक्त करने के लिए सभी स्वीकृति खर्च करने योग्य है, इसलिए इसे कैप किया जा सकता है
FFA ने क्रेडिट सिस्टम को सीधे बाईपास कर दिया, जिसने प्रबंधक को बिना किसी लीवर के छोड़ दिया यह: मैक्स डेली स्पेंड अगर (! एफएफए) के पीछे बैठा और एफएफए उत्पाद को कैप नहीं कर सका, और "आज स्वीकार" की गिनती करने के लिए कोई पंक्ति नहीं थी क्योंकि कभी भी खर्च नहीं किया गया था। FFA स्वीकृति अब क्रेडिट को मिंट करता है और उसी ब्लॉक में लीड पर खर्च करता है दावे के रूप में, इसलिए खर्च रिकॉर्ड हमेशा मौजूद रहता है और कभी कभी नहीं बहा सकता है असाइनमेंट मैक्स डेली खर्च क्रेडिट-केवल शाखा से बाहर निकलता है और लागू होता है दोनों पथ - मुक्त करने के लिए सभी का मतलब है कि सदस्य को भुगतान करने के लिए एक संतुलन नहीं दिया गया था से, नहीं कि एक प्रबंधक को बाध्य नहीं कर सकता कि वे कितने दिन में लेते हैं। निश्चित रूप से अभी भी क्रेडिट-केवल: ओरग-वाइड क्रेडिट स्विच और बैलेंस चेक। FFA के पास कम होने का कोई संतुलन नहीं है। कैप को उन लोगों के बाद जाँचा जाता है, इसलिए क्रेडिट सदस्य जो दोनों टूट गए हैं और कैप्ड इनसफ्फिसिएंट क्रेडिट की रिपोर्टिंग करते रहते हैं। Note AcceptResult.creditSpent अब FFA पथ पर सच है (इसे दस्तावेज दिया गया था) हमेशा झूठी। यह सही है - वास्तव में एक क्रेडिट का सेवन किया जाता है - और यह पहुंचता है प्रतिक्रिया स्वीकार करते हैं और प्रकाशन Assigned NATS पेलोड। लीड असाइनमेंट अभी भी टाइप करें FFA के लिए AUTO ASSIGN रिकॉर्ड करता है, इसलिए इतिहास दोनों को अलग रखता है।.
· kamo-internal
अनुरोधकर्ता को नाम दें, ऑर्ग लाइन को स्थानांतरित करें, ओपन ऑर्ग बटन को छोटा करें
समर्थन सतहों के लिए तीन समायोजन। "Open org as System user" अब "Open Org" है, जो तुरंत असाइन/reassign के बाद बैठे हैं। बल्कि पंक्ति के अंत तक - यह उन सवालों के समान है जो जवाब देते हैं: यह अन्य चीज़ जो आप करते हैं, जब आपके डेस्क पर टिकट उतरता है और जवाब अंदर होता है। ग्राहक का किरायेदार। टूलटिप अभी भी यह बताता है कि टैब सिस्टम यूज़र के रूप में खुलता है, जो शॉर्ट लेबल ड्रॉप करता है। यह अपना वजन रखता है; यह किसी अन्य व्यक्ति के लिए एक दरवाजा है व्यापार और प्राथमिकता छोड़ने के भाई की तरह नहीं पढ़ा जाना चाहिए। संगठन टिकट हेडर से बाहर चला जाता है और "+ न्यू टिकट" के बाईं ओर जाता है। पंक्ति, जो खुद ही टिकट के लिए शीर्षलेख छोड़ देता है। कई टैब्स के साथ टैब बार खोलें इसके बजाय नए-टिकट नियंत्रण करता है, इसलिए पंक्ति अकेले संगठन के लिए प्रस्तुत करती है - प्रत्येक टैब एक अलग ग्राहक हो सकता है और यह वास्तव में जब यह कह लायक है। The खिड़की का अपना शीर्षक अब "{person} - {org}" पढ़ता है, जो एक स्थान पर बनाया गया है क्योंकि यह एक जगह है। आगंतुक-नाम पथ एक शीर्षक को भी धक्का देता है और दूसरी अभिव्यक्ति यह है कि कैसे ऑर्ग चुपचाप एक अज्ञात आगंतुक अपने नाम देता है। चैट → समर्थन पंक्तियों का शीर्षक उन व्यक्ति के बाद किया जाता है जो हमेशा ASKED थे। टिकट खोलना अपनी चैट में शामिल हो जाता है, इसलिए एक व्यस्त एजेंट जमा करता है, और दूसरे से titling प्रतिभागियों ने हर बार पंक्ति का नाम बदल दिया, एक सहयोगी ने इसे देखा - वही बातचीत एक अलग व्यक्ति के रूप में दिखा रहा है। अनुरोधकर्ता का नाम अब के साथ सहमत है पहले से ही पंक्ति पर चेहरा।.
· kamo-internal
कहा जाता है कि कौन सी घड़ी घटना संवाद पर है, और प्रारंभ समय दिखाने के लिए
चार चीजें संगीतकार गलत हो गया, पर / कैलेंडर और लीड पेज पर समान रूप से। क्षेत्र ब्राउज़र का था। यह लैपटॉप के बारे में एक तथ्य है, नहीं के बारे में सदस्य: जो कोई प्रोफ़ाइल पूर्वी कह रहा है और जो डेनवर से काम कर रहा है अभी भी अपने दिन को पूर्वी में बुक करता है, और संवाद ने "3pm माउंटेन" को "3pm माउंटेन" के साथ बीज दिया स्क्रीन पर यह प्रकट करने के लिए कुछ नहीं है। नई घटनाओं अब सदस्य के अपने आप में रचना प्रोफ़ाइल क्षेत्र, सुरक्षा सेवा के समयक्षेत्र / प्रभावी के माध्यम से हल अगस्त के बाद से अस्तित्व में है और इसके सामने कोई अगला मार्ग नहीं था, इसलिए हर कॉल 404'd in Next and come to UTC. क्षेत्र को मूल्य पर नामित किया गया है, नीचे पिकर, और हेडर में तारीख के बगल में, वास्तव में लागू ऑफसेट पर आज के बजाय घटना की तारीख पर। शुरुआत और अंत क्षेत्र उनके बीच एक तीर के साथ पक्ष में बैठे थे और कोई नहीं सभी पर लेबल, दो unannounced बक्से ने कार्ड की चौड़ाई को साझा किया - उस चौड़ाई पर एक डेटटाइम-लोकल इनपुट की अपनी सामग्री की आवश्यकता से कम कमरा है, इसलिए रीडिंग क्लिप किया गया था। कार्ड के साथ "स्टार्ट टाइम" और एकमात्र दृश्य शब्द होना आज / Tomorrow / All-day बटन इसके बगल में, स्क्रीन पर कुछ भी शुरू नहीं हुआ समय समायोजित किया जाना था। वे अब पूर्ण चौड़ाई स्टैक्ड हैं, प्रत्येक नामित और कार्ड का नेतृत्व "जब" होता है। एक नया कार्यक्रम चालू घंटे के शीर्ष पर शुरू हुआ, जो अतीत में है प्रत्येक sixty में से पचास मिनट; लीड पेज के कॉलबैक ने एक घंटे जोड़ा और अजीब मिनट रखा, 4:37pm की पेशकश की। अब दोनों डिफ़ॉल्ट का उपयोग करते हैंEventStart — एक घंटे के बाहर, तिमाही घंटे तक फैल गया। डिफ़ॉल्ट कैलेंडर पहले सूचीबद्ध सेवा थी, और सेवा संगठन के साझा कैलेंडर को पहले उद्देश्य से सूचीबद्ध करता है, क्योंकि यह है साइडबार में सही रीडिंग ऑर्डर जहां यह एक फिल्टर है। यहां पहली प्रविष्टि यह भी डिफ़ॉल्ट है, इसलिए एक नया कार्यक्रम ऑर्ग-वाइड प्रकाशित किया गया था जब तक सदस्य वे कभी नहीं किए गए निर्णय से बाहर देखा और चुने गए। सदस्य का अपना प्राथमिक कैलेंडर अब जाता है, और साझा एक "ऑर्ग-वाइड" बैज रखता है। लीड कॉलबैक संगीतकार अब लीड्स ज़ोन को चुपचाप बीज नहीं देता है; यह प्रदान करता है यह एक लेबल वाला एक-टैप स्विच के रूप में सदस्य के पास है। इसके संगीतकार संदर्भ memoised है, जो tidy के बजाय लोड-असर है - अंतर्निहित यह एक था ताजा वस्तु हर प्रतिपादन, इसलिए कैलेंडर नेटवर्क मध्य टाइपिंग से पहुंचे संवाद को रीसेट करें और खारिज करें कि सदस्य ने क्या किया है।.
· SecurityService
हाइबरनेट स्टेटमेंट को Prometheus की गिनती प्रकाशित करें
/actuator/prometheus पहले से ही jdbc * और hikaricp * लेकिन कोई hibernate *, क्योंकि स्प्रिंग बूट 3 केवल ऑटो-configures उन मीट्रिक जब ************* कक्षा पर है। जोड़ा गया, प्लस hibernate.generate statistics. कारण ठोस है। एन+1 प्रश्नों के लिए इस सेवा का ऑडिट करके किया जाना चाहिए एसोसिएशन नेविगेशन के लिए grepping, और उस विधि दोनों में गलत है निर्देश: यह ओवर-काउंट, क्योंकि एक एसोसिएशन का नाम 'vendor' या 'user' जैसा है कुछ संस्थाओं पर आलसी है और दूसरों पर उत्सुक है (9 की 67 रिपोर्ट की गई साइटों को बाहर कर दिया गया) क्योंकि यह देखता है, क्योंकि यह बुरी तरह से टिप्पणी करता है, क्योंकि यह उत्सुक होना चाहिए और कुछ की जरूरत नहीं है)। .getx().gety() लेकिन एक आलसी संग्रह पर पुनरावृत्ति नहीं - जो अधिकांश है वास्तविक सतह। hibernate statement total माप द्वारा उसी प्रश्न का उत्तर देता है। एक समापन बिंदु प्रति कॉल 200 स्टेटमेंट जारी करना दृश्यमान है जो भी कोड लेता है, और ओपन-इन-व्यू अर्थ में उनमें से प्रत्येक आलसी लोड अन्यथा चुप है। कुछ प्रतिशत की लागत। इसके लायक एक सेवा जहां अंतिम लेखा परीक्षा चार पाया अलग O(rows) समापन बिंदु।.
· kamo-internal
प्रत्येक समर्थन चैट पंक्ति पर अनुरोधकर्ता की तस्वीर दिखाएं
चैट में हर पंक्ति → समर्थन ने समान ब्लू सपोर्ट ग्लिफ़ पहनी, जो कि कोई मदद नहीं है जब आप यह तय करते हैं कि आपको क्या चुनना है। अब चेहरा है जिन्होंने पूछा। Glyph वास्तव में एक मामले के लिए जीवित रहता है, और यह सर्वर के बजाय एक तथ्य है एक अनुमान की तुलना में: एक अज्ञात वेब चैट आगंतुक के पास कोई सदस्य रिकॉर्ड नहीं है, इसलिए टिकट Org के सिस्टम सदस्य - मालिक - इसके अनुरोधकर्ता के रूप में। उस तस्वीर को दिखा रहा है गलत व्यक्ति को बातचीत पर रखा जाएगा, और मंच के अपने विपणन पर विजेट यह वह चेहरा होगा जो भी सूची पढ़ रहा है। दर्शक की org निर्देशिका अभी भी पहले परामर्श किया जाता है, क्योंकि यह लाइव कॉपी है - एक जो सदस्य अपनी तस्वीर एक पल पहले ही वहाँ सही है बदल गया है - और सर्वर का URL वह गिर गया है जो अन्य संगठनों में अनुरोधकर्ता को कवर करता है, जो अन्य संगठनों में अनुरोध करता है। कि निर्देशिका कभी नहीं सुना है। शुरू में जानबूझकर पंक्ति के शीर्षक में वापस नहीं आते: एक समर्थन पंक्ति पर शीर्षक समकक्ष है, इसलिए एक अनुरोधकर्ता सर्वर का नाम नहीं दिया जाएगा समर्थन एजेंट की शुरूआत, अवतार पर जो कह रहा है कि कौन पूछ रहा है। साथ न तो एक नाम और न ही एक तस्वीर वहाँ कोई व्यक्ति आकर्षित करने के लिए है, और glyph ईमानदार है।.
· MediaService
प्रत्येक समर्थन चैट पंक्ति पर अनुरोधकर्ता का चेहरा और नाम रखो
एक चैट → सपोर्ट पंक्ति ने हर लाइन पर एक ही समर्थन glyph दिखाया, इसलिए का एक कतार वे समान ब्लू सर्कल की दीवार थे। वास्तव में चेहरे के लिए स्कैन है जो भी ASKED, इसलिए पंक्ति अब अनुरोधकर्ता की आईडी, डिस्प्ले नाम और फोटो रखती है। तस्वीर को ग्राहक को छोड़ देने के बजाय यहां हल किया जाता है, जो पूरी तरह से है कठिनाई: इस फ़ीड में हर दूसरे अवतार को दर्शक के अपने आप से वापस भरा जाता है संगठन निर्देशिका, और एक समर्थन अनुरोधकर्ता है - मंच के डेस्क पर - हमेशा किसी और के सदस्य, इसलिए कि निर्देशिका वास्तव में पंक्तियों के लिए कुछ भी नहीं लौटती है के लिए है। दो बैच पढ़ने वाले एक पृष्ठ को कवर करते हैं, उसी आत्मा में जैसे आगंतुक पूर्व-खिंचाव उनके साथ। अवतार पंक्ति सदस्य के बजाय आईडी द्वारा फिर से पढ़ी जाती है। getAvatar(): अवतार एक जॉइन्ड पदानुक्रम है और एसोसिएशन आलसी है, इसलिए जो रिटर्न देता है वह एक है आधार प्रकार के प्रॉक्सी। उदाहरण के बाद भी AvatarPhoto इसके माध्यम से झूठी है प्रारंभिककरण और प्रत्येक अपलोड की गई तस्वीर अवतार निर्माता वेक्टर पर देखी जाएगी। पथ आईडी द्वारा लोड हो रहा है कंक्रीट सबक्लास और इसके फ़ाइल एक्सटेंशन देता है। अनुरोधकर्ताIsAmbiguous मामला है कि glyph जीवित रहता है, और यह एक विशिष्ट मामला है। एक बचाव के बजाय: एक अज्ञात वेब चैट आगंतुक के पास कोई सदस्य रिकॉर्ड नहीं है, इसलिए टिकट का नाम ऑर्ग का सिस्टम सदस्य है - मालिक - इसके अनुरोधकर्ता के रूप में। उनकी तस्वीर गलत व्यक्ति को बातचीत पर रखा जाएगा, और मंच के अपने विपणन पर विजेट यह वह चेहरा होगा जो भी सूची पढ़ रहा है।.
· kamo-internal
उत्पाद शीर्षलेख पर पूल की गिनती, प्रति सदस्य स्वीकृत
उपलब्ध लीड्स को किसी उत्पाद समूह की प्रत्येक सदस्य पंक्ति में प्रस्तुत किया गया था, लेकिन यह एक उत्पाद समूह है। (उत्पाद, बाजार) पूल की संपत्ति - समान संख्या नीचे दोहराई गई पकड़ नियमों के रूप में कई सदस्यों के लिए स्तंभ। यह एक बार ग्रुप हेडर में जाता है, यह कहाँ है। अब मुक्त स्तंभ दिखाता है कि वास्तव में क्या लापता था: प्रत्येक सदस्य कितने लीड करता है अब तक स्वीकार किया गया है, उनके मैक्स डेली स्पेंड के खिलाफ "3/10" के रूप में प्रस्तुत किया गया है। शेष हेडरूम एक नज़र में पठनीय है। गिनती / प्रबंधन से आती है, जो "today" को उसी तरह से हल करता है जिस तरह से टोपी करता है - सदस्य का अपना टाइमज़ोन।.
· kamo-shared-library
साझा पुस्तकालय से सदस्य के फोटो URL को हल करें
चैट → समर्थन सूची अनुरोधकर्ता के चेहरे को दिखाने के बारे में है, और समर्थन अनुरोधकर्ता है - मंच के अपने डेस्क पर - हमेशा किसी और के सदस्य। हर उस फीड में अन्य अवतार बैकफिल्ड क्लाइंट पर व्यूअर के ऑर्ग से निर्देशिका, जिसने कभी उनके बारे में नहीं सुना है, इसलिए इसे सर्वर-साइड को हल करना पड़ता है मीडिया सर्विस द्वारा। इसका मतलब है कि एक दूसरी सेवा को अवतार ऑब्जेक्ट नाम दिया गया है, और ऑब्जेक्ट पथ वास्तव में है वह चीज जो दो बार अस्तित्व में नहीं होना चाहिए: यह जो कुछ भी मेजबान के साथ उपसर्ग करने के लिए इस्तेमाल किया अनुरोध पर पहुंचे, इसलिए जब एक ओरग के डोमेन 404'd पर अपलोड की गई तस्वीर दूसरा, प्रारंभिक में गिरावट और एक बग की तरह "कोई तस्वीर" की तरह लग रहा है। इसलिए AvatarObjectPaths यहां चल रहा है और सुरक्षा सेवा की प्रति एक प्रतिनिधि बन जाती है अपने आप में कोई स्ट्रिंग नहीं रखता है। MemberAvatarUrls संकल्प के बाकी कहते हैं: उपयोगकर्ता से पहले सदस्य ओवरराइड डिफ़ॉल्ट, फोटो बनाम अवतार निर्माता ने उदाहरण के पहले DISCRIMINATOR द्वारा फैसला किया - एक lazily लोड अवतार आधार प्रकार का एक प्रॉक्सी है, इसलिए उदाहरण प्रत्येक अपलोड किया जाएगा वेक्टर पथ के लिए फोटो - और होस्ट → थीम डोमेन। एक मेजबान जो एक डोमेन नहीं है अनुमान के बजाय कोई यूआरएल उत्पन्न नहीं करता है: प्रारंभिक में कोई छवि नहीं घटती है, एक टूटी हुई नहीं है। इसके अलावा REQUESTOR ID को दो समर्थन चैट फ़ीड अनुमानों में भी जोड़ता है।.
· SecurityService
प्रत्येक सदस्य की स्वीकार्य-today गिनती प्रति उत्पाद वापस लौटें
मैनेज-क्रेडिट मैक्स डेली स्पेंड को दर्शाता है, लेकिन इसके बारे में कुछ भी नहीं, इसका उपयोग कितना किया जाता है। इसलिए एक प्रबंधक यह नहीं बता सकता कि कोई सदस्य अपनी टोपी से एक लीड था या नहीं था शुरू नहीं हुआ। /manage अब स्वीकार किया Today keyed MemberId:vendorProductId. "today" है वास्तव में क्रेडिटलीड असाइनमेंट सर्विस के रूप में हल किया गया, जब यह लागू होता है तो उसे हल करता है कैप — MEMBER का अपना टाइमज़ोन, स्टार्ट-ऑफ-डे अब, उसी की गिनती LeadCredit.dateSpent rows - तो आंकड़ा सचमुच संख्या टोपी है एक दिन के बारे में दूसरी राय के बजाय परीक्षण किया गया। प्रति सदस्य एक समूहीकृत क्वेरी, प्रति सदस्य x उत्पाद नहीं। नोट FFA उत्पादों की रिपोर्ट 0: स्वीकृति वहाँ कोई क्रेडिट खर्च, और टोपी करता है उन पर लागू नहीं है (पूरा क्रेडिट ब्लॉक अगर (! एफएफए)) के पीछे है, तो ऐसा नहीं है। दो स्तंभ सुसंगत रहते हैं।.

तुम्हारा ब्रह्मांड इंतजार कर रहा है.
मिनटों में मुफ्त शुरू करें. जब भी आप तैयार हों तो उत्पाद जोड़ें - कोई माइग्रेशन नहीं, कोई नया लॉगइन नहीं.
हमेशा के लिए मुफ्त - कोई क्रेडिट कार्ड की आवश्यकता नहीं