Portal Engine Questions on portal engine and web parts.
Version 4.x > Portal Engine > Bizform API Update View modes: 
User avatar
Member
Member
tspring-allegra - 1/21/2011 7:14:04 AM
   
Bizform API Update
Hi

I want to update a Bizform record as mentioned in the help file: http://devnet.kentico.com/docs/devguide/index.html?api_bizforms_updating_a_record.htm

But is there anyway to lookup the correct record to update using another field other than the record ID value?

For example using the demo code in the help file. Can a bizform record be updated using the FirstName field to find the correct record. If you know the record you want to update has the FirstName as 'Bob' and you dont know which record ID it is.

Thanks,
Tim

User avatar
Member
Member
tspring-allegra - 1/26/2011 4:16:58 AM
   
RE:Bizform API Update
Does anyone have any ideas?

Is manually running an SQL query on the Bizform table the only way to lookup Bizform data using a field other than the record ID?

User avatar
Kentico Support
Kentico Support
kentico_radekm - 1/31/2011 7:08:59 AM
   
RE:Bizform API Update
Hello.

I believe other simple simple solution is possible.

There is a following line in example code:

DataSet ds = genConn.ExecuteQuery(dci.ClassName + ".selectall", null, null, null);


Fourth parameter is where condition, and you can get only record(s) where e.g. first name is Bob.

Second line you need to modify is:

DataClass formRecord = new DataClass(dci.ClassName, formRecordID, genConn);


Here you just use different constructor:

public DataClass(
string className,
DataRow dataRow
)



Where DataRow can be passed from DataSet you already have.

Best Regards,
Radek Macalik


User avatar
Member
Member
tspring-allegra - 2/8/2011 9:09:49 AM
   
RE:Bizform API Update
Thanks for the help. How do I modify the below line so that formRecordID isn't used. If I simply remove it I get an application error.

DataClass formRecord = new DataClass(dci.ClassName, formRecordID, genConn);



User avatar
Kentico Support
Kentico Support
kentico_radekm - 2/9/2011 7:58:15 AM
   
RE:Bizform API Update
Hello.

What application error, please? Can you provide some details or screenshot? Thank you.

Best Regards,
Radek Macalik

User avatar
Member
Member
tspring-allegra - 2/9/2011 8:46:59 AM
   
RE:Bizform API Update
Hi

I'm testing it with the simple code below:


protected void Page_Load(object sender, EventArgs e)
{
string bizFormName = "MyBizForm";
string siteName = "MySite";

BizFormInfo bfi = BizFormInfoProvider.GetBizFormInfo(bizFormName, siteName);
if (bfi != null)
{
DataClassInfo dci = DataClassInfoProvider.GetDataClass(bfi.FormClassID);
if (dci != null)
{
GeneralConnection genConn = ConnectionHelper.GetConnection();
DataSet ds = genConn.ExecuteQuery(dci.ClassName + ".selectall", null, null, null);
if (!DataHelper.DataSourceIsEmpty(ds))
{
//DataClass formRecord = new DataClass(dci.ClassName, formRecordID, genConn);
DataClass formRecord = new DataClass(dci.ClassName, genConn);
if (!formRecord.IsEmpty())
{
Response.Write(formRecord.GetValue("Name").ToString() + "<br />");
}
}
}
}
}


Where I've removed the formRecordID from the "DataClass formRecord = new DataClass(dci.ClassName, formRecordID, genConn);" line

I get an "Object reference not set to an instance of an object." error

Server Error in '/' Application.
Object reference not set to an instance of an object.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Source Error:

The source code that generated this unhandled exception can only be shown when compiled in debug mode. To enable this, please follow one of the below steps, then request the URL:

1. Add a "Debug=true" directive at the top of the file that generated the error. Example:

<%@ Page Language="C#" Debug="true" %>

or:

2) Add the following section to the configuration file of your application:

<configuration>
<system.web>
<compilation debug="true"/>
</system.web>
</configuration>

Note that this second technique will cause all files within a given application to be compiled in debug mode. The first technique will cause only that particular file to be compiled in debug mode.

Important: Running applications in debug mode does incur a memory/performance overhead. You should make sure that an application has debugging disabled before deploying into production scenario.

Stack Trace:

[NullReferenceException: Object reference not set to an instance of an object.]
Display_Participant2.Page_Load(Object sender, EventArgs e) +258
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +24
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +41
System.Web.UI.Control.OnLoad(EventArgs e) +131
CMS.PortalControls.CMSAbstractWebPart.OnLoad(EventArgs e) +177
System.Web.UI.Control.LoadRecursive() +65
System.Web.UI.Control.LoadRecursive() +190
System.Web.UI.Control.LoadRecursive() +190
System.Web.UI.Control.LoadRecursive() +190
System.Web.UI.Control.LoadRecursive() +190
System.Web.UI.Control.LoadRecursive() +190
System.Web.UI.Control.LoadRecursive() +190
System.Web.UI.Control.LoadRecursive() +190
System.Web.UI.Control.LoadRecursive() +190
System.Web.UI.Control.LoadRecursive() +190
System.Web.UI.Control.LoadRecursive() +190
System.Web.UI.Control.LoadRecursive() +190
System.Web.UI.Control.LoadRecursive() +190
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2427


Version Information: Microsoft .NET Framework Version:2.0.50727.4206; ASP.NET Version:2.0.50727.4209


I'm I missing something?

User avatar
Kentico Support
Kentico Support
kentico_radekm - 2/9/2011 10:13:44 AM
   
RE:Bizform API Update
Hello.

Are you using this constructor?

DataClass formRecord = new DataClass(dci.ClassName, genConn);

If so, you are missing second parameter. It should be like thid:

DataClass(string className,DataRow dataRow,GeneralConnection conn).

So, you are missing dataRow parameter. In my original answer I mentioned you need to use constructor with dataRow (as second parameter).

Best Regards,
Radek Macalik

User avatar
Member
Member
tspring-allegra - 2/10/2011 8:14:48 AM
   
RE:Bizform API Update
Thanks for the help.

I dont have much experience in datarows and datasets so it was a little confusing.

So after a little searching on google. If I want to loop through each record in my Bizform dataset, is this the correct way to do it:


foreach (DataRow dataRow in ds.Tables[0].Rows)
{
DataClass formRecord = new DataClass(dci.ClassName, dataRow, genConn);
if (!formRecord.IsEmpty())
{
Response.Write(formRecord.GetValue("Name").ToString() + "<br />");
}
}


It seams to work, I'm just wondering if its the best way of doing it.

Thanks.

User avatar
Kentico Support
Kentico Support
kentico_radekm - 2/15/2011 6:30:25 AM
   
RE:Bizform API Update
Hello.

Yes, this code is OK and you can use it with no problem.

However, I would recommend you simple modification like this:

DataClass formRecord = null;

foreach (DataRow dataRow in ds.Tables[0].Rows)
{
formRecord = new DataClass(dci.ClassName, dataRow, genConn);
if (!formRecord.IsEmpty())
{
Response.Write(formRecord.GetValue("Name").ToString() + "<br />");
}
}


The advantage is that you do not need to alocate memory for new DataClass object every time.

Best Regards,
Radek Macalik

User avatar
Member
Member
S2-yahoo - 9/19/2011 9:05:06 AM
   
RE:Bizform API Update
it gaves a message errors "No mapping exists from object type System.Data.DataRow to a known managed provider native type."

User avatar
Kentico Support
Kentico Support
kentico_radekm - 9/21/2011 1:53:12 AM
   
RE:Bizform API Update
Hello.

Well, I will need to see whole code you wrote. In this case, it is better to send me whole web part and its code-behind files directly, so I can simply reproduce it on my machine and find what is wrong. Could you please send me these files (in zip package) to support@kentico.com and refer to this forum thread? Thank you.

Best Regards,
Radek Macalik