Может кто-нибудь преобразовать мой SQL-запрос в хранимую процедуру или выражение запроса
`` У меня есть этот SQL-запрос, в котором я пытаюсь получить идентификатор возможности из объекта возможности, для которого документ утверждения не был создан (документ подтверждения - это имя другого объекта) . Я не думаю, что fetchxml поддерживает такой тип запроса. Я новичок в crm, и мой проект в версии crm 4.0.
вот запрос sql:
Select OpportunityId
from opportunity AS c
left JOIN (
select a.opportunitynameid
from opportunity o
JOIN ApprovalDocument a ON a.opportunitynameid=o.OpportunityId
) AS b ON c.OpportunityId=b.opportunitynameid
Where b.opportunitynameid IS NULL and statecode=0
QueryExpression query = new QueryExpression ("new_doc"); // используем имя вашей сущности ColumnSet cols = new ColumnSet();
cols.AddColumn("new_opportunitynameid");
ConditionExpression cond = new ConditionExpression("new_opportunitynameid",ConditionOperator.NotNull);
query.ColumnSet = cols;
query.Criteria.AddCondition(cond);
RetrieveMultipleRequest req = new RetrieveMultipleRequest();
req.Query = query;
req.ReturnDynamicEntities = true;
RetrieveMultipleResponse res =(RetrieveMultipleResponse) service.Execute(req);
List<string> docList = new List<string>();
foreach(BusinessEntity item in res.BusinessEntityCollection.BusinessEntities)
{
DynamicEntity entity = (DynamicEntity)item;
string guid = ((Lookup)(entity.Properties["new_opportunitynameid"])).Value.ToString();
if (docList.Contains(guid))
{
continue;
}
docList.Add(guid);
}
// Get opps whose state code == 0
QueryExpression query2 = new QueryExpression("opportunity");
ColumnSet cols2 = new ColumnSet();
cols2.AddColumn("opportunityid");
cols2.AddColumn("statecode");
ConditionExpression cond2 = new ConditionExpression("statecode",ConditionOperator.Equal,"Open");
query2.ColumnSet = cols2;
query2.Criteria.AddCondition(cond2);
RetrieveMultipleRequest req2 = new RetrieveMultipleRequest();
req2.Query = query2;
req2.ReturnDynamicEntities = true;
RetrieveMultipleResponse res2 = (RetrieveMultipleResponse)service.Execute(req2);
List<string> oppList = new List<string>();
foreach (BusinessEntity item in res2.BusinessEntityCollection.BusinessEntities)
{
DynamicEntity entity = (DynamicEntity)item;
string guid = ((Microsoft.Crm.Sdk.Key)(entity.Properties["opportunityid"])).Value.ToString();
if(oppList.Contains(guid))
{
continue;
}
oppList.Add(guid);
}
// diff is our final list
List<string> diff = new List<string>();
foreach(string item in oppList)
{
if(docList.Contains(item) == false)
diff.Add(item);
}
// now create document records for all opportunitites in diff list
// To do
}