Updating account record using Oracle\Siebel CRM On Demand Web Service in .NET


 

To update the Account record we need to first add web reference to the account.wsdl.

 

Than can make use of AccountUpdate method of Account Entity.

 

  // Login to the CRM server

            string loginUrlString = https://servername/Services/Integration?command=login”;

            // Get the valid Session id to be appended for each subsequent request

            String sessionID = ManageSession.Login(loginUrlString, @”orgname/username”, “password”);

            try

            {

                // Download the account wsdl from the Admin section of the CRM application

                // Add web reference to the wsdl

                // Create the instance of the opportunity entity

                Account myAcc = new Account();

                myAcc.Url = https://secure-ausomxapa.crmondemand.com/Services/Integration;jsessionid=” + sessionID;               

                // Create the instance of Account Data

                AccountData[] myAccData = new AccountData[1];

                myAccData[0] = new AccountData();

                // the order number to be updated

                myAccData[0].stOrder_Number = “orderNumber”;

                // the id of the account to be updated

                myAccData[0].Id = “orderID”;

                // creating ListOfAccountData object

                ListOfAccountData myLstOfAcctData = new ListOfAccountData();

                myLstOfAcctData.Account = myAccData;

                // using AccountUpdate_Input

                AccountUpdate_Input myAccUpdateInput = new AccountUpdate_Input();

                myAccUpdateInput.ListOfAccount = myLstOfAcctData;

                // using account’s Accout Update method to update the record               

                AccountUpdate_Output myAccntUpdateOutput = myAcc.AccountUpdate(myAccUpdateInput);

            }

            catch (SoapException ex)

            {

            }

            catch (Exception ex)

            {

            }

 

 

That’s it …

Using Oracle CRM On Demand Web Service to query Opportunity Data in .NET


1) Create a windows application

2) Put the following code in the form load event handler

 

Explaination is put in as comment

 

 

private void Form1_Load(object sender, EventArgs e)

        {         

            // Login to the CRM server

            string loginUrlString = https://servername/Services/Integration?command=login”;          

            // Get the valid Session id to be appended for each subsequent request

            String sessionID = ManageSession.Login(loginUrlString, @”orgname/username”, “pwd”);

 

            try

            {

                // Download the opportunity wsdl from the Admin section of the CRM application

                // Add web reference to the wsdl

                // Create the instance of the opportunity entity

                Opportunity myOpp = new Opportunity();

                myOpp.Url = https://servername/Services/Integration;jsessionid=” + sessionID;

                // Set the query

                // To find the record with sales stage as closed/won

                queryType mySalesStage = new queryType();

                mySalesStage.Value = “LIKE ‘Closed/Won'”;

                // Values needed back from the server

                // 1) Purchase Order Date

                queryType myPODate = new queryType();

                myPODate.Value  = “”;

                // 2) Purchase Order Number

                queryType myPONumber = new queryType();

                myPONumber.Value  = “”;

                // 2) Opportunity Name

                queryType myOppName=new queryType();

                myOppName.Value=“”;   

               

                // Create opportunityquery instance and set the appropriate parameters

                OpportunityQuery myOppQuery = new OpportunityQuery();

                myOppQuery.SalesStage = mySalesStage;

                myOppQuery.dtPurchase_Order_Date = myPODate;

                myOppQuery.stPurchase_Order_No = myPONumber;

                myOppQuery.OpportunityName = myOppName;

 

                // Set ListOfOpportunityQuery

                ListOfOpportunityQuery lstOfOppQuery = new ListOfOpportunityQuery();

                lstOfOppQuery.Opportunity = myOppQuery;

                // Number of records to fetch

                lstOfOppQuery.pagesize = “100”;

 

                // set OpportunityQueryPage_Input

                OpportunityQueryPage_Input myOppInput = new OpportunityQueryPage_Input();

                myOppInput.ListOfOpportunity = lstOfOppQuery;

               

                // Get the output

                OpportunityQueryPage_Output myOutput = myOpp.OpportunityQueryPage(myOppInput);

 

                // Get ListOfOpportunityData

                ListOfOpportunityData myOppData = myOutput.ListOfOpportunity;

                OpportunityData[] oppData = myOppData.Opportunity;

                // Total number of records returned

                MessageBox.Show(oppData.GetLength(0).ToString());

 

                foreach(OpportunityData oData in oppData)

                {

                    MessageBox.Show(“Opportunity Name :-“ + oData.OpportunityName

                        + “, Opp PO Date =” + oData.dtPurchase_Order_Date.ToShortDateString()

                        + ” Opp PO Number =” + oData.stPurchase_Order_No);                 

 

                }

   }

            catch (SoapException ex)

            {

                MessageBox.Show(ex.Detail.InnerXml);

            }

 

 

The code for ManageSession.Login static mehtod

 

public static String Login(String loginUrlString, String userName, String password)

        {

        try

        {

            // create a http request and set the headers for authentication

            HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(loginUrlString);

            HttpWebResponse myResponse;

            myRequest.Method = “POST”;

            // passing username and password in the http header

            // username format if it includes slash should be the forward slash /

            myRequest.Headers[“UserName”] = userName;

            myRequest.Headers[“Password”] = password;          

            myResponse = (HttpWebResponse)myRequest.GetResponse();

            Stream sr = myResponse.GetResponseStream();

            // retrieve session id

            char[] sep = { ‘;’ };

            String[] headers = myResponse.Headers[“Set-Cookie”].Split(sep);

            for (int i=0; i <= headers.Length-1; i++)

            {

            if (headers[i].StartsWith(“JSESSIONID”))

            {

            sep[0] = ‘=’;

            SessionID = headers[i].Split(sep)[1];

            break;

            }

            }

            sr.Close();

            myResponse.Close();

        }

        catch (WebException webException)

        {

           

        }

        catch (Exception ex)

        {

        }

        // send back the session id that should be passed to subsequent calls

        // to webservices

        return SessionID;       

        }

 

That’s it …

Adding a Read Only Field or Read Only Column to a SharePoint List


We had a requirement to add a read only column to one of our document library. Using Create column it isn’t possible to add a read only column.  One option could be to create the new column and then using SharePoint designer we can make use of JavaScript and modify the NewForm.aspx and EditForm.aspx to display that field as read only.

We thought of adding it as a Site Column making use of ReadOnly property of field.

<?xml version=1.0 encoding=utf-8?>

<Elements xmlns=http://schemas.microsoft.com/sharepoint/>

                <Field ID={0B8A5574-80BF-4d5e-99B9-9A25D8E8D21E}

                                   Name=_IsApproved

                                   DisplayName=Is Document Approved?

                                   Group=Custom Columns

                                   Type=Text                      

                                   Required=FALSE      

                                   ReadOnly=TRUE       

                                 

                                   >

                </Field>            

</Elements>

However if we set ReadOnly as True the field doesn’t appear on Site Settings pages for managaing site columns and content types. However we can add it to the view using the below code

 

SPSite oSiteCollection = new SPSite(@”http://servername:port&#8221;);

            using (SPWeb oWebsite = oSiteCollection.OpenWeb())

            {

                SPList oList = oWebsite.Lists[“ListName”];

                oList.Fields.Add(“Is Document Approved?”, SPFieldType.Text, false);

                oList.Update();

                SPView oView = oList.DefaultView;

                oView.ViewFields.Add(“Is Document Approved?”);             

                oView.Update();

                }

However the field was still appearing in editform.aspx and newform.aspx in editable mode.         

So finally tried this

Modified the definition for the custom site column as following

<?xml version=1.0 encoding=utf-8?>

<Elements xmlns=http://schemas.microsoft.com/sharepoint/>

                <Field ID={0B8A5574-80BF-4d5e-99B9-9A25D8E8D21E}

                                   Name=_IsApproved

                                   DisplayName=Is Document Approved?

                                   Group=Custom Columns

                                   Type=Text                      

                                   Required=FALSE      

                                   ReadOnly=FALSE

                                   ShowInDisplayForm=TRUE

                                   ShowInEditForm=FALSE

                                   ShowInNewForm=FALSE                        

                                   >

                </Field>            

</Elements>

 

Setting ShowInDisplayForm and ShowInEditForm as False and keeping ReadOnly as False so that the field could appear within Site Settings pages for managing site columns.

This last solution worked ..

The feature file for installing the above site column

<?xml version=1.0 encoding=utf-8?>

<Feature  Id=D829F71B-7FCC-4f0d-950D-6B562AFF400E

          Title=MyCustom Feature

          Description=This is my custom column feature

          Version=12.0.0.0

          Scope=Site

          xmlns=http://schemas.microsoft.com/sharepoint/>

                <ElementManifests>

                                <ElementManifest Location=MyCustomColumn.xml />                          

                </ElementManifests>  

</Feature>

 

Now the only way to edit the column was through SharePoint Object Model

   SPSite oSiteCollection = new SPSite(@”http://servername:port&#8221;);

            using (SPWeb oWebsite = oSiteCollection.OpenWeb())

            {

                SPList oList = oWebsite.Lists[“ListName”];        

                SPListItem item = oList.Items[0];         

                item[“Is Document Approved?”] = “These are my changes”;

                item.Update();              

            }

That’s it..

Adding custom menu and button to custom entity through ISV.CONFIG


To add custom menu and button to Entity form,

Go to Customizations-Export Customizations-Select ISV.CONFIG.

Open the customizations.xml file and add the following xml tags to it

<Entity name=new_customentity>

          <MenuBar>

            <CustomMenus>

              <Menu>

                <Titles>

                  <Title LCID=1033 Text=My Custom Menu>

                  </Title>

                </Titles>

                <MenuItem Url=http://www.microsoft.com PassParams=0 WinMode=1>

                  <Titles>

                    <Title LCID=1033 Text=Coming Soon ..>

                    </Title>

                  </Titles>

                </MenuItem>

              </Menu>

            </CustomMenus>

          </MenuBar>

          <ToolBar>

            <Button AvailableOffline=false ValidForCreate=1 ValidForUpdate=1 Url=http://www.google.co.in>

              <Titles>

                <Title LCID=1033 Text=My Custom Button… />

              </Titles>

              <ToolTips>

                <ToolTip

                 LCID=1033

                 Text=My custom button tooltip     />

              </ToolTips>

            </Button>

          </ToolBar>

        </Entity>

That’s it ..

Using Siebel CRM On Demand Web Services in Microsoft.NET


1) Create a new windows application.

2) Put the following code in the form load

private void Form1_Load(object sender, EventArgs e)

{

string loginUrlString = https://servername/Services/Integration?command=login&#8221;;

String sessionID = ManageSession.Login(loginUrlString, @”orgname-devusername”, “password”);

}

3) Define the login method within ManageSession class in the following manner


public static string SessionID = “”;

public static String Login(String loginUrlString, String userName, String password)

{

try

{

// create a http request and set the headers for authentication

HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(loginUrlString);

HttpWebResponse myResponse;

myRequest.Method = “POST”;

// passing username and password in the http header

// username format if it includes slash should be the forward slash /

myRequest.Headers[“UserName”] = userName;

myRequest.Headers[“Password”] = password;

myResponse = (HttpWebResponse)myRequest.GetResponse();

Stream sr = myResponse.GetResponseStream();

// retrieve session id

char[] sep = { ‘;’ };

String[] headers = myResponse.Headers[“Set-Cookie”].Split(sep);

for (int i=0; i <= headers.Length-1; i++)

{

if (headers[i].StartsWith(“JSESSIONID”))

{

sep[0] = ‘=’;

SessionID = headers[i].Split(sep)[1];

break;

}

}

sr.Close();

myResponse.Close();

}

catch (WebException webException)

{

}

catch (Exception ex)

{

}

// send back the session id that should be passed to subsequent calls

// to webservices

return SessionID;

}

That’s it..

The remote server returned an error: (500) Internal Server Error while using Siebel CRM On Demand Web Services.


I got this error while trying to Logging In to the Web Services Session using .NET. Spent whole day for finding out what could be the reason behind the issue. Finally came to know the issue was because of the username being not passed correctly.

 

The username that we were passing was in this particular format that we would normally do

 

 ‘orgname-devusername’

 

Whereas it was expecting it in this format

 

‘orgname-dev/username’

 

i.e. forward slash instead of the back slash.

 

I hope it helps!

Nishant Rana's Weblog

Everything related to Microsoft .NET Technology

Skip to content ↓