सर्वोच्च पद्धति में ContentVersion रिकॉर्ड सम्मिलित करने में असमर्थ [अनुलिपि]
एक भागीदार समुदाय में, मैं भविष्य में कॉलआउट करने से पहले एक ContentVersion रिकॉर्ड सम्मिलित कर रहा हूं और साथ ही भविष्य के कॉलआउट में ContentVersion रिकॉर्ड सम्मिलित कर रहा हूं।
मैं भविष्य के कॉलआउट से पहले ContentVersion रिकॉर्ड सफलतापूर्वक सम्मिलित करने में सक्षम हूं, लेकिन Fututre कॉलआउट के भीतर यह त्रुटि दे रहा है -
System.DmlException: सम्मिलित करें विफल। पंक्ति 0 पर पहला अपवाद; पहली त्रुटि: INSUFFICIENT_ACCESS_ON_CROSS_REFERENCE_ENTITY, आपके पास आपके द्वारा अनुरोधित ऑपरेशन करने के लिए आवश्यक पहुंच का स्तर नहीं है। यदि आवश्यक हो तो कृपया रिकॉर्ड के स्वामी या अपने व्यवस्थापक से संपर्क करें। [NetworkId]
public class myclass
{
....
insert ContentVersion1; // Able to insert record
callout();
}
@future(callout = true)
callout(){
...
insert ContentVersion2; // Gives error *System.DmlException: Insert failed. First exception on row 0; first error: INSUFFICIENT_ACCESS_ON_CROSS_REFERENCE_ENTITY, You do not have the level of access necessary to perform the operation you requested. Please contact the owner of the record or your administrator if access is necessary.: [NetworkId]*
}
भविष्य के कॉलआउट में ContentVersion संस्करण रिकॉर्ड क्यों नहीं डाला गया है, यह निश्चित नहीं है।
जवाब
जब नेटवर्क सक्षम हो और समुदाय के संदर्भ में नेटवर्कविट दस्तावेज़ पर आवेषण करते समय NetworkId को भरना आवश्यक हो। मैंने पिछले दिनों इसी तरह के मुद्दों को देखा है जहां अगर NetworkId मौजूद नहीं है, तो इन्सर्फ़ INIUFFICIENT_ACCESS_ON_CROSS_REFERENCE_ENTITY निम्न त्रुटि के साथ सम्मिलित नहीं होता है
यहाँ दस्तावेज क्या कहते हैं:
सामग्री सुविधा लाइसेंस वाले सभी उपयोगकर्ता अपनी निजी लाइब्रेरी में संस्करण बना सकते हैं। ग्राहक और भागीदार पोर्टल उपयोगकर्ताओं को अनुरोध में समुदाय के NetworkId की भी आपूर्ति करनी चाहिए।
आप नेटवर्क आईडी के मान की जांच करने के लिए डिबग स्टेटमेंट जोड़ सकते हैं, यह देखने के लिए कि क्या यह शून्य मान लौटा रहा है। आप getNetworkId () का उपयोग करके ऐसा कर सकते हैं
getNetworkId ()
उपयोगकर्ता के वर्तमान समुदाय को लौटाता है।
हस्ताक्षर
सार्वजनिक स्थैतिक स्ट्रिंग getNetworkId ()
प्रतिलाभ की मात्रा
प्रकार: स्ट्रिंग
मैंने पिछले दिनों के मुद्दों को भी देखा है जहाँ @ सीवन विधि कंटेंटवॉर्स रिकॉर्ड के लिए NetworkId का संदर्भ प्राप्त करने में सक्षम नहीं है। जब एक ContentVersion और फिर एक ContentDocumentLink पार्टनर कम्युनिटीज़ उपयोगकर्ता के रूप में सम्मिलित करता है, तो Network Id सही ढंग से ContentVersion पर सेट हो जाता है। हालाँकि, यदि उस तर्क को एसिंक्रोनस रूप से निष्पादित किया जाता है, जैसे कि @future विधि में, तो नेटवर्क आईडी अब मौजूद नहीं है (सिंक और async तर्क दोनों में Network.getNetworkId () को डीबग करके पुष्टि की गई है) और सामग्री-संदेश सम्मिलित करना संदेश के साथ विफल हो जाता है इंसुफ़ेक्ट एन्टिटी (NetworkId) पर सहायक उपकरण
इस तरह के परिदृश्य में नेटवर्कव्यू मान को बाह्य रूप से पास करने के लिए एक संभावित फिक्स है। नीचे नमूना कोड देखें
public static void methodCall(){
String netId = network.getNetworkId();
dummyFutureCall('0010I00002GitdvQAB',netId);
}
@future
public static void dummyFutureCall(Id BasketId,String netValue){
system.debug('**networkId In method : ' + network.getNetworkId());
system.debug('**networkId In method : ' + netValue);
ContentVersion cv = new ContentVersion();
cv.Title = 'Test Document';
cv.PathOnClient = 'TestDocument.pdf';
cv.VersionData = Blob.valueOf('Test Content');
cv.IsMajorVersion = true;
cv.NetworkId = netValue;
Insert cv;
//Get Content Documents
List<ContentVersion> docList = [SELECT Id, contentDocumentId FROM ContentVersion where id =: cv.id ];
//Create ContentDocumentLink
ContentDocumentLink cdl = New ContentDocumentLink();
cdl.LinkedEntityId = basketId;
cdl.ContentDocumentId = docList[0].contentDocumentId;
cdl.shareType = 'V';
Insert cdl;
}