domingo, 15 de septiembre de 2013

CRM 4.0 - Acceso y autenticación desde asp a crm con acceso a registro

using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using Microsoft.Crm.Sdk;
using Microsoft.Crm.SdkTypeProxy;
using Microsoft.Win32;
namespace WebApplication1
{
    public partial class _Default : System.Web.UI.Page
    {
        public string orgname;
        public string crmurl;
        public string metaurl;
        public bool offline;
        protected void Page_Load(object sender, EventArgs e)
        {
            #region CRM URLs and Organization Name
            //Determine Offline State from Host Name
            Response.Write(Request.Url.Host.ToString());
            if (Request.Url.Host.ToString() == "127.0.0.1")
            {
                offline = true;
                //Retrieve the Port and OrgName from the Registry
                RegistryKey regkey = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\MSCRMClient");
                orgname = regkey.GetValue("ClientAuthOrganizationName").ToString();
                string portnumber = regkey.GetValue("CassiniPort").ToString();
                //Construct the URLs
                string baseurl = "http://localhost:" + portnumber + "/mscrmservices/2007/";
                crmurl = baseurl + "crmservice.asmx";
                metaurl = baseurl + "metadataservice.asmx";
            }
            else
            {
                offline = false;
                //Retrieve the URLs from the Registry
                RegistryKey regkey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\MSCRM");
                string ServerUrl = regkey.GetValue("ServerUrl").ToString();
                crmurl = ServerUrl + "/2007/crmservice.asmx";
                metaurl = ServerUrl + "/2007/metadataservice.asmx";
                //Retrieve the Query String from the current URL
                if (Request.QueryString["orgname"] == null)
                {
                    orgname = string.Empty;
                }
                else
                {
                    //Query String
                    string orgquerystring = Request.QueryString["orgname"].ToString();
                    if (string.IsNullOrEmpty(orgquerystring))
                    {
                        orgname = string.Empty;
                    }
                    else
                    {
                        orgname = orgquerystring;
                    }
                }
                if (string.IsNullOrEmpty(orgname))
                {
                    //Windows Auth URL
                    if (Request.Url.Segments[2].TrimEnd('/').ToLower() == "isv")
                    {
                        orgname = Request.Url.Segments[1].TrimEnd('/').ToLower();
                    }
                    //IFD URL
                    if (string.IsNullOrEmpty(orgname))
                    {
                        string url = Request.Url.ToString().ToLower();
                        int start = url.IndexOf("://") + 3;
                        orgname = url.Substring(start, url.IndexOf(".") - start);
                    }
                }
            }
            #endregion

            using (new CrmImpersonator())
            {
                CrmAuthenticationToken token;
                if (offline == true)
                {
                    token = new CrmAuthenticationToken();
                }
                else
                {
                    // Notice that the Context parameter value is Page.Context.
                    token = CrmAuthenticationToken.ExtractCrmAuthenticationToken(Context, orgname);
                }
                token.OrganizationName = orgname;
                token.AuthenticationType = 0;
                //Create the Service
                CrmService service = new CrmService();
                service.Credentials = System.Net.CredentialCache.DefaultCredentials;
                service.CrmAuthenticationTokenValue = token;
                service.Url = crmurl;
            // This code shows how to create the metadata service.
            // It is not used in this sample.

            // MetadataService meta = new MetadataService();
            // meta.CrmAuthenticationTokenValue = token;
            // meta.Credentials = CredentialCache.DefaultCredentials;
            // meta.Url = "http://localhost/mscrmservices/2007/MetadataService.asmx";

                account account = new account();
                account.name = "Offline Impersonator: " + DateTime.Now.TimeOfDay.ToString();
                if (offline == false)
                    // Explicitly set the owner ID for the record if not offline.
                    account.ownerid = new Owner("systemuser", token.CallerId);
                service.Create(account);
            }
            Response.Write("Done");
        }
    }
}

No hay comentarios:

Publicar un comentario