Na tomto příspěvku jsem chtěl demonstrovat jednoduchost a vůbec možnost provázání různých aplikací s Sharepointem. Rozhodl jsem se pro vytvoření webparty, zobrazující aktuálně přiřazené a nesplněné aktivity v Microsoft CRM 4, protože to bude určitě užitečná featura pro spoustu lidí využívajících firemní intranet.
Takto vypadá výsledný webpart (po kliknutí na daný předmět aktivity se otevře přímo v editačním okně CRM):
Takto jsou zobrazeny aktivity v CRM:
Zdrojové kódy i WSP balíček je přiložen na konci tohoto postu.
Načítání aktivit z CRM serveru probíhá přes webservice, url adresa webové služby je vždy ve formátu:
http://server:port/MSCRMServices/2007/CrmService.asmx
Pokud používáte Visual Studio 2008, je potřeba vygenerovat klientský wrapper až v „Advance“ dialogu jako na následujícím screenshotu:
Aby bylo možné rozlišit aktuálně používanou organizaci zavedenou v CRM, je potřeba ještě provést nastavení objektu CrmAuthenticationToken jako na následujícím příkladu:
public static CrmService GetCrmService(string crmServerUrl, string organizationName)
{
if (string.IsNullOrEmpty(crmServerUrl)) throw new ArgumentNullException("crmServerUrl");
if (string.IsNullOrEmpty(organizationName)) throw new ArgumentNullException("organizationName");
CrmSdk.CrmAuthenticationToken token = new CrmSdk.CrmAuthenticationToken();
token.OrganizationName = organizationName;
CrmService service = new CrmService();
UriBuilder builder = new UriBuilder(crmServerUrl);
builder.Path = "//MSCRMServices//2007//CrmService.asmx";
service.Url = builder.Uri.ToString();
service.Credentials = System.Net.CredentialCache.DefaultCredentials;
service.CrmAuthenticationTokenValue = token;
return service;
}
Aby jsme mohli vyhledat svoje aktivity, je nejprve nutné zjistit identifikátor přihlášeného uživatele:
WhoAmIRequest request = new WhoAmIRequest();
WhoAmIResponse response = (WhoAmIResponse)service.Execute(request);
Guid userId = response.UserId;
Pak už jen stačí vyhledat aktivity s přiřazeným vlastníkem na sebe sama a nastaveným status kódem – open nebo scheduled.
private static BusinessEntityCollection GetAssignedActivities(CrmService crmService, Guid userId)
{
// budeme nacitat aktivity prirazene prihlasenemu uzivateli
ConditionExpression condition = new ConditionExpression();
condition.AttributeName = "ownerid";
condition.Operator = ConditionOperator.Equal;
condition.Values = new object[] { userId };
// potrebujeme pouze otevrene aktivity
ConditionExpression condition2 = new ConditionExpression();
condition2.AttributeName = "statecode";
condition2.Operator = ConditionOperator.Equal;
condition2.Values = new object[] { (int)ActivityPointerState.Open };
ConditionExpression condition3 = new ConditionExpression();
condition3.AttributeName = "statecode";
condition3.Operator = ConditionOperator.Equal;
condition3.Values = new object[] { (int)ActivityPointerState.Scheduled };
FilterExpression filterState = new FilterExpression();
filterState.FilterOperator = LogicalOperator.Or;
filterState.Conditions = new ConditionExpression[] { condition2, condition3 };
FilterExpression filterRequired = new FilterExpression();
filterRequired.FilterOperator = LogicalOperator.And;
filterRequired.Conditions = new ConditionExpression[] { condition };
FilterExpression filter = new FilterExpression();
filter.FilterOperator = LogicalOperator.And;
filter.Filters = new FilterExpression[] { filterRequired, filterState };
// seradime podle konce aktivity
OrderExpression order = new OrderExpression();
order.AttributeName = "scheduledstart";
order.OrderType = OrderType.Ascending;
// vytvoreni vyhledavaciho dotazu - potrebujeme vsechny aktivity
QueryExpression query = new QueryExpression();
query.EntityName = EntityName.activitypointer.ToString();
query.ColumnSet = new AllColumns();
query.Criteria = filter;
query.Orders = new OrderExpression[] { order };
// vykonani samotneho dotazu
return crmService.RetrieveMultiple(query);
}
Následně již stačí vyrenderovat všechny položky do HTML. Prosté, ale dobré 🙂
Instalace feature:
cd C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\BIN
stsadm -o addsolution -filename crm4connector.wsp
stsadm -o deploysolution -name crm4connector.wsp -immediate -allcontenturls -allowGacDeployment -allowCasPolicies
následně aktivujte feature ve správě webu:
Přidejte feature „Activities in CRM“ na libovolnou stránku:
V nastavení feature je nutné ještě nastavit url adresu serveru s Microsoft CRM 4 a název organizační jednotky:
(níže je také možné upravit obecné texty podle potřeby – podle aktuálně používaném jazyku)
Hotovo, po potvrzení by se měl zobrazit seznam aktivit aktuálně přihlášeného uživatele. Pokud je něco špatně, budete upozorněni:
Ke stažení:
sources.zip (272,14 kb)
bin.zip (244,01 kb)