2016-05-23 86 views
2

我目前使用ssis包中的C#腳本組件將數據從平面文件導入CRM數據庫。 現在,我需要做的數據等數據驗證:Dynamics Crm ssis包的數據驗證

  1. 要檢查屬性是否需要在CRM領域
  2. 要檢查屬性是否進行了正確的數據類型
  3. 要檢查的長度和(最多),文本類型的最小尺寸屬性
  4. 要檢查查找和選擇列表類型的屬性是指正確的模式

這一切我需要他們在SSIS SC進行驗證ript組件使用C#代碼。 我對這種數據驗證非常陌生。

我試圖做數據驗證使用數據轉換轉換和數據分析任務,後來才知道這不是確切的方式來做它,它應該在C#代碼。

後來我試圖驗證這樣的:

while (string.IsNullOrEmpty(Row.AccountName)) 
{ 
    MessageBox.Show("Account Name should not be Blank"); 
    if (!string.IsNullOrEmpty(Row.AccountName)) 
    { 
     break; 
    } 
} 

if (!string.IsNullOrEmpty(Row.AccountName)) 
{ 
    if (Row.AccountName.Length <= 20) 
     newaccount["name"] = Row.AccountName; 

    while (Row.AccountName.Length >= 20) 
    { 
     MessageBox.Show("Account name is too long and it should be less than 251 characters"); 
     if (Row.AccountName.Length <= 20) 
      newaccount["name"] = Row.AccountName; 
     } 
    } 
} 

但我需要訪問從CRM的元數據的長度和其他屬性。請指教。

+0

存在具有這種信息的元數據表。以下是字段級元數據的入門者:http://guruprasadcrm.blogspot.com/2011/07/retrieve-attribute-data-using-metadata.html。 sdk也有樣本 - 搜索retrieveattribute –

回答

0

下面是一些示例代碼,以幫助您開始:

using Microsoft.Xrm.Sdk; 
using Microsoft.Xrm.Sdk.Messages; 
using Microsoft.Xrm.Sdk.Metadata; 
using Microsoft.Xrm.Tooling.Connector; 
using System.Collections.Generic; 
using System.Linq; 

public void Run(IOrganizationService svc) 
{ 
    var all = allAttributes(svc, "account"); 

    var accountNum = all.Where(a => a.LogicalName == "accountnumber").FirstOrDefault(); 

    var isRequired = accountNum.RequiredLevel.Value == AttributeRequiredLevel.SystemRequired; 

    var type = accountNum.AttributeType; 

    //to get max length, cast AttributeMetadata instance to appropriate type 
    var myStringAttribute = accountNum as StringAttributeMetadata; 

    var maxLength = myStringAttribute.MaxLength; 
} 

//Retrieve all attributes of an entity 
private List<AttributeMetadata> allAttributes(IOrganizationService svc, string entity) 
{ 
    var req = new RetrieveEntityRequest(); 

    req.EntityFilters = EntityFilters.Attributes; 

    req.LogicalName = entity.ToLower(); 

    var response = (RetrieveEntityResponse)svc.Execute(req); 

    return response.EntityMetadata.Attributes.ToList(); 
}