BCS Creator and Updater methods for Dot Net Assembly

 Business Connectivity Services, SharePoint 2010.

In our previous blog posts we have created BCS Model with Microsoft Visual Studio 2010 and have shown how to define Finder, Specific Finder and ID Enumerator methods for our Department Entity:

BCS model in Visual Studio 2010 – SpecificFinder and IdEnumerator

In this blog post we’ll extend our BCS Model and explain how to define Creator and Updater methods for Department Entity which will allow users to edit/insert records to the Department Entity.

First we are going to define our Creator method.

1) Right click on the Methods section of the Department Entity and choose “Add New Method”.

Add new BCS method

2) Give the method a name of “AddDepartment”.

Set name of BCS method

Next, we should create parameters for the Creator method. You should define all the fields that you want to see in the “New Item” dialog as Input parameters for the Creator method. The method also needs a return parameter which should be a structure which will contain information about the identifier(s) of the Department Entity.

3) Select Add Department method in Department entity and add new parameter in Bdc Method Details window.

Create input parameter

4) In this example we will create three parameters with “In” direction and name them “Name”, “GroupName” , ”DepartmentId”.

Name the parameters

5) Next we need to modify the properties of the type descriptors of each parameter. In BDC Explorer window expand the tree until you get to the type descriptors of the parameters.

Set property values of parameters

You should set the following properties to the type descriptors.

DepartmentID:

Name: DepartmentId

TypeName: System.Int16

Identifier: DepartmentId

GroupName:

Name: GroupName

TypeName: System.String

CreatorField:true

Name:

Name: Name

TypeName: System.String

CreatorField: true

6) Now we need to define the return parameter for the “AddDepartment” method. The return parameter should be a structure which will describe the identifier of the Department entity.

Open DepartmentService.cs class that we used in our previous blog posts to add C# code, and add the following class just under the Service class.

public class DepartmentSimple
{
    public short DepartmentId
    {
        get;
        set;

    }

}

7) Open Bdc Methods Explorer window and create new “Return” parameter for the AddDepartment method and name it “returnParameter”.

create return BCS parameter

8) Open the BDC explorer window, navigate to returnParameter of the AddDepartment method and change the type descriptor’s properties.

Name: DepartmentSimple

Type Name: BdcModelProject2.BdcModel1.DepartmentSimple,BdcModel1

9) Right click on the DepartmentSimple type descriptor and select “Add Type Descriptor”. Set the following properties.

Name: DepartmentId

TypeName: System.Int16

Identifier: DepartmentId

10) Here is how the parameters and type descriptors should be declared.

parameters and typedescriptors

11) Next, we need to create a Method Instance for the AddDepartment method. Open the Bdc Method Details window, select AddDepartment method and create a new method instance. Set the properties as has been done in the screenshot below:

create MethodInstance

12) Open DepartmentService.cs file and you’ll find there an AddDepartment method generated for you.

Replace the body of that method with the following code.

DataClasses1DataContext db = new DataClasses1DataContext(“server=localhost;database=adventureworks2000;uid=***;pwd=***”); BdcModelProject2.Department createdEntity = new BdcModelProject2.Department
{
 
   DepartmentID = DepartmentId,
    Name = Name,
    GroupName = GroupName,
    ModifiedDate = DateTime.Now,
    rowguid = System.Guid.NewGuid(),

};

db.Departments.InsertOnSubmit(createdEntity);

db.SubmitChanges();

DepartmentSimple IdentifiersStruct = new DepartmentSimple
{
    DepartmentId = DepartmentId,
};

return IdentifiersStruct;

13) Rebuild the project and press CTRL+F5 to redeploy it. Open your SharePoint site and create a new external list on this BCS External Content Type. Select the “Items” ribbon on the top and you’ll see that “New Item” button is enabled which means that we have declared Creator method in BCS model properly, otherwise it will be disabled.

View BCS data

14) Click on “New Item” and it will show you the form to insert your data. In step 5 we declare input parameters and set CreatorField=true only for Name and GroupName, for that reason in this form we see only the Name and GroupName fields. If you need to add new fields, you need to declare them as input parameters and set Creator Field to true. For the Department table, DepartmentId is auto incremental PK, for that reason we didn’t set it as Creator field, but if your PK is not auto incremental then you need to define it as a Creator field as well.

Click on Save button in this form.

create new item

15) Here is the result.

insert result

Now, let’s create our BCS Updater method for our Department entity.

16) Right click on the Methods section of the Department entity and select “Add New Method”.

add new BCS method

17) Give our new method a name of “UpdateDepartment”.

give BCS method a name

We need to create input parameters for updater method.

18) In Bdc Method explorer window choose UpdateDepartment method and add new “In” parameter.

create new BCS parameter

19) Open Bdc Explorer window , expand the tree and navigate to this parameter. Choose the type descriptor and change the properties.

Name: Department

Type Name: BdcModelProject2.BdcModel1.Department,BdcModel1

20) Right click on Department type descriptor and add two type descriptors with the following properties.

DepartmentID:

Name: DepartmentId

TypeName: System.Int16

Identifier: DepartmentId

UpdaterField:true

GroupName:

Name: GroupName

TypeName: System.String

UpdaterField:true

Name:

Name: Name

TypeName: System.String

UpdaterField: true

NOTE: In this blog post we use Department table, and its PK field is set as auto incremental. To get updater method executed properly, we need to declare DepartmentId as Read Only in our Specific finder method’s return parameter.

21) Parameter and type descriptors should be looked like this. If you want to update more fields you need to add them as type descriptors set UpdaterField=true, as it is shown in step 21.

set the updater parameters

22) We need to create a method instance for UpdateDepartment method. In Bdc Method explorer window choose UpdateDepartment , add new method instance and set method instance type to Updater.

create a MethodInstance for our Updater

23) Open DepartmentService.cs and you’ll find there UpdateDepartment method generated for you.

Replace the body with the following C# code.

DataClasses1DataContext db = new DataClasses1DataContext(“server=localhost;database=adventureworks2000;uid=***;pwd=***”); BdcModelProject2.Department updatedEntity = (from entity in db.Departments
                                                          where entity.DepartmentID == parameter.DepartmentId
                                                          select entity).FirstOrDefault();

updatedEntity.Name = parameter.Name;
updatedEntity.GroupName = parameter.GroupName;
dcontext.Submi
tChanges();

24) Rebuild the project, click CTRL+F5 to redeploy, go to the External List that we have already created in step 14, select any record and you’ll see that “Edit Item” button is enabled, so we are allowed to edit the record cause we configure updater method in BCS Model properly.

Edit our data

25) Click on “Edit Item” and you’ll see Name and GroupName fields, which you can update. Change the GroupName and click on Save button.

save any update made

26) Here you can see the updated result.

results of our update method executing

Hopefully you found this post useful – in my next blog post I will be showing you how to create a BCS association between two External Content Types in Visual Studio 2010.

<hrayr/>

4 comments on “BCS Creator and Updater methods for Dot Net Assembly

  1. Hans on said:

    What if an exception occures in my Create method or I want to validate the entered values? How is it possible to send a error or validation message back to the user without using the yellow asp.net exception page?Thanks for your great HowTos!

  2. Nick Swan on said:

    There is not a lot of guidance available from Microsoft yet:http://msdn.microsoft.com/en-us/library/ff464398.aspxSee the last section on best practices.We hope to do a more detailed blog post on this soon.

  3. Lee Ann on said:

    Great post.I’ve got mine working great but I would like to make the following changes:I would like to display all of the fields in the Update Form but I would only like two of them available for update. If I set my Type Descriptor to Read Only in the Specific Finder method then that item does not get displayed at all in the Update Form. I have also tried setting the “UpdaterField” to false on the Type Descriptor in the Update Method but that doesn’t seem to do anything.Thanks!

  4. I’m curious. Isn’t i possible to edit the value of an identifier in the edit form? Like if it would be possible to see the CustomerID in the screenshot above? (This one: http://lightningtools.com/blog/images/lightningtools_com/blog/WindowsLiveWriter/BCSCreatorandUpdatermethodsforDotNetAsse_1158E/Step25_2.jpg)

Leave a Reply

Your email address will not be published. Required fields are marked *

*

HTML tags are not allowed.