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í: