簡體   English   中英

使用SDK導入Dynamics CRM附件數據

[英]Dynamics CRM Attachment Data Import Using SDK

我正在嘗試將附件/注釋導入CRM Dynamics,我正在使用SDK進行此操作。

沒有使用數據導入向導。

不是單獨創建注釋實體,而是以編程方式使用數據導入功能

我主要是利用從SDK示例代碼(SDK \\ SampleCode \\ CS \\數據管理\\ DataImport)的DataImport樣品。

     Import import = new Import()
            {
                ModeCode = new OptionSetValue((int)ImportModeCode.Create),
                Name = "Data Import"
            };
 Guid importId = _serviceProxy.Create(import);


_serviceProxy.Create(
                   new ColumnMapping()
                   {
                       ImportMapId = new EntityReference(ImportMap.EntityLogicalName, importMapId),
                       ProcessCode = new OptionSetValue((int)ColumnMappingProcessCode.Process),

                       SourceEntityName = sourceEntityName,
                       SourceAttributeName = sourceAttributeName,

                       TargetEntityName = targetEntityName,
                       TargetAttributeName = targetAttributeName

                   });

我收到錯誤消息“找不到對附件的引用”。

文檔說crm異步服務將在磁盤上找到物理文件並將其上傳,我的問題是異步服務在哪里查找附件文件?

我試圖將documentbody字段映射到桌子上附件的完整路徑,但這仍然行不通。

在問題編輯闡明使用導入向導而非SDK之前,已提供以下答案。 以下答案特定於使用SDK。


通過SDK將文件附加到CRM中的Annotation(注釋)記錄時,您確實使用了documentbody屬性(以及mimetype ),但是必須首先將其轉換為base64。

像這樣:

var myFile = @"C:\Path\To\My\File.pdf";
// Do checks to make sure file exists...

// Convert to Base64.
var base64Data = Convert.ToBase64String(System.IO.File.ReadAllBytes(myFile));

var newNote = new Entity("annotation");

// Set subject, regarding object, etc.

// Add the data required for a file attachment.
newNote.Attributes.Add("documentbody", base64Data);
newNote.Attributes.Add("mimetype", "text/plain"); // This mime type seems to work for all file types.

orgService.Create(newNote);

我在一篇晦澀的博客文章中找到了解決方案,我認為文檔具有誤導性或不清楚性,整個工作方式使服務器磁盤上的文件可供異步處理,這很奇怪。

為了遵循相同的原則,所有內容都應像csv文件本身一樣發送,同時鏈接到同一導入。

為了解決這個問題,我們需要為每個物理附件創建單獨的特殊內部 ImportFile,並將其鏈接到具有附件記錄詳細信息的導入。

正如您在下面看到的那樣,使用ImportId鏈接附件ImportFile,然后設置兩個屬性(ProcessCode和FileTypeCode),最后它們都起作用了。

可以說使用這種方法比單獨創建注釋記錄要高效和快捷得多。

foreach (var line in File.ReadLines(csvFilesPath + "Attachment.csv").Skip(1))
            {
                var fileName = line.Split(',')[0].Replace("\"", null);
                using (FileStream stream = File.OpenRead(attachmentsPath + fileName))
                {
                    byte[] byteData = new byte[stream.Length];
                    stream.Read(byteData, 0, byteData.Length);
                    stream.Close();
                    string encodedAttachmentData = System.Convert.ToBase64String(byteData);

                    ImportFile importFileAttachment = new ImportFile()
                    {
                        Content = encodedAttachmentData,
                        Name = fileName,
                        ImportMapId = new EntityReference(ImportMap.EntityLogicalName, importMapId),
                        UseSystemMap = true,
                        ImportId = new EntityReference(Import.EntityLogicalName, importId),
                        ProcessCode = new OptionSetValue((int)ImportFileProcessCode.Internal),
                        FileTypeCode = new OptionSetValue((int)ImportFileFileTypeCode.Attachment),
                        RecordsOwnerId = currentUserRef
                    };
                    _serviceProxy.Create(importFileAttachment);
                }
                idx++;
            }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM