Dynamics CRM4.0 和 Dynamics CRM2011 Plugin 实现一样的功能的方法的比较

时间:2022-06-29 07:44:59

1.给类型赋值不同 

CRM4 plugin给lookup赋值为空 :

Lookup lookupnull = new Lookup();
lookupnull.IsNull = true;
lookupnull.IsNullSpecified = true;
entity.Properties["new_storeroom_areaid"] = lookupnull;

CRM2011 给 EntityReference 赋值为空:

entity["new_storeroom_areaid"] = null;

 2.单表查询,返回Entity

 CRM4.0 :

private DynamicEntity GetNewPrInfo(Guid NewPrID)//根据GUID查询某字段
{
    ColumnSet colSet = new ColumnSet(NewPrInfo.EntityName);
    colSet.AddColumn(NewPrInfo.AttributeName_Assigner);
    colSet.AddColumn(NewPrInfo.AttributeName_AssignNode);

    TargetRetrieveDynamic target = new TargetRetrieveDynamic();
    target.EntityId = NewPrID;
    target.EntityName = NewPrInfo.EntityName;

    RetrieveRequest request = new RetrieveRequest();
    request.ColumnSet = colSet;
    request.ReturnDynamicEntities = true;
    request.Target = target;

    RetrieveResponse response = (RetrieveResponse)this.crmService.Execute(request);
    DynamicEntity PromotionPe = (DynamicEntity)response.BusinessEntity;
    return PromotionPe;
 }

CRM2011: 

Entity accEntity = service.Retrieve(“new_test”, new_testid, new ColumnSet("字段1", "字段2"));//根据GUID,查询实体new_test的字段1和字段2的值。
Entity accEntity = service.Retrieve(entityName, entityId, new ColumnSet(true));//根据GUID,查询实体new_test的所有字段。

 3.初始化CRM组织服务

 CRM4:

CrmAuthenticationToken token = new CrmAuthenticationToken();
token.AuthenticationType = 0; 
token.OrganizationName = "AdventureWorksCycle";

CrmService service = new CrmService();
service.Url = ""http://<servername>:<port>/mscrmservices/2007/crmservice.asmx";
service.CrmAuthenticationTokenValue = token;
service.Credentials = System.Net.CredentialCache.DefaultCredentials;

CRM2011:

IFD 的服务前面的段必须是https,不分内部和外部。

Uri orgServiceUri = new Uri("https://192.168.1.101/MicrosoftDynamicCRM/XRMServices/2011/Organization.svc");
ClientCredentials credentials = new ClientCredentials();
credentials.UserName.UserName = CRMUserName;
credentials.UserName.Password = CRMUserPassword;
OrganizationServiceProxy crmServiceProxy = new OrganizationServiceProxy(orgServiceUri, null, credentials, null);
crmService = (IOrganizationService)crmServiceProxy;

2. on-premise 内部部署(AD认证),,初始化WebService时的方式如下: 

服务前面的段可以是https,也是可以http

如果没有路由映射 外网是访问不了   只能内网访问

Uri organizationUri = new Uri("http://192.168.1.101/MicrosoftDynamicCRM/XRMServices/2011/Organization.svc");
IServiceConfiguration<IOrganizationService> orgConfigInfo = ServiceConfigurationFactory.CreateConfiguration<IOrganizationService>(organizationUri);
var Orgcreds = new ClientCredentials();
Orgcreds.Windows.ClientCredential = new System.Net.NetworkCredential("administrator", "admiN123", "DynamicCRM.com");
OrganizationServiceProxy _serviceproxy = new OrganizationServiceProxy(orgConfigInfo, Orgcreds);
return (IOrganizationService)_serviceproxy;

这样子也可以:

 Uri orgServiceUri = new Uri(Config.CrmWebServiceUrl);
var credentials = new ClientCredentials();
credentials.Windows.ClientCredential = new System.Net.NetworkCredential(Config.CrmServerAccount, Config.CrmServerPSW, Config.CrmServerDomain);
OrganizationServiceProxy _serviceproxy = new OrganizationServiceProxy(orgServiceUri, null, credentials, null);
return (IOrganizationService)_serviceproxy;

 4.返回多个实体

 CRM4:

// Create a column set holding the names of the columns to be retrieved.
ColumnSet cols = new ColumnSet();
cols.Attributes = new string [] {"name", "accountid"};

// Create the query object.
QueryByAttribute query = new QueryByAttribute();
query.ColumnSet = cols;
query.EntityName = EntityName.account.ToString();

// The query will retrieve all accounts whose address1_city is Sammamish.
query.Attributes = new string [] {"address1_city"};
query.Values = new string [] {"Sammamish"};

// Execute the retrieval.
BusinessEntityCollection retrieved = service.RetrieveMultiple(query);

CRM2011:

 方法一:

string fetchxml = @"<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false' aggregate='true'>
                                  <entity name='new_po_exp_detail'>
                                    <attribute name='new_exp_amount' alias='new_exp_amount_sum' aggregate='sum' />
                                    <attribute name='new_submit_amout' alias='new_submit_amout_sum' aggregate='sum' />
                                    <attribute name='new_expense_category' alias='new_expense_category' groupby='true' />
                                    <filter type='and'>
                                      <condition attribute='statecode' operator='eq' value='0' />
                                    </filter>
                                    <link-entity name='new_po' from='new_poid' to='new_po_exp_detail' alias='ab'>
                                      <filter type='and'>
                                        <condition attribute='statecode' operator='eq' value='0' />
                                        <condition attribute='new_po_status' operator='in'>
                                          <value>5</value>
                                          <value>7</value>
                                        </condition>
                                        <condition attribute='new_promotion_pe' operator='eq'  value='" + new_promotion_peId + @"' />
                                      </filter>
                                    </link-entity>
                                  </entity>
                                 </fetch>";
EntityCollection entitycols = service.RetrieveMultiple(new FetchExpression(fetchxml));

 方法二:

QueryByAttribute query = new QueryByAttribute("new_categorytate");
query.ColumnSet = new ColumnSet("new_categorytateid");
query.AddAttributeValue("statecode", 0);
query.AddAttributeValue("new_sn", new_sn);//产品品类编号
EntityCollection encols = service.RetrieveMultiple(query);