[英]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.