No field match identifier (SBL-DAT-00416) - siebel

Currently im doing Siebel Open UI. I got 3 drop down choices which are :
Account No
Transaction Date
Fund Code
All field above are calculated field. I create different picklist for every calculated field above. Account No and Transaction Date are from BC (A) but Fund Code is from BC (B). In order to put Fund Code in same Applet with another 2 field above, i had created calculated field in BC (A) and put Fund Code field there. But it keep come out with this error.
Kindly assist me on this issue.
Thanks and Regards.

Are you trying to pull a field from defined in BC "B" into an applet which is based on BC "A" ? This cannot d be done. OpenUI runs on the UI layer, but the rules of the second business layer still hold true. Every applet has a Business Component behind it and you can only map the fields of that underlying BC onto that applet.
You will have to define all three calculated fields on the same BC "A" inorder to map them to the applet.

Related

How can I create a form with unknown number of columns and rows?

I don't know if I will be able to explain this very well, so please bear with me, and I will update where/when needed as much as I can.
I have a Django app that is designed to take in data from users for products that we need to configure. The products are split into main categories of main products, which are then further split by customer. Main products have default settings, and customer products have SOME of these settings changed, plus some others not listed by the main product. Each customer may have multiple variations of the product too.
Example of products:
Main Product A
|
|-> Customer A Product A1
|-> Customer A Product A2
|
|-> Customer B Product A1
|-> Customer B Product A2
Main Product B
|
|-> Customer A Product B1
|-> Customer A Product B2
|
|-> Customer B Product B1
|-> Customer B Product B2
What I need/want, is a table for staff to enter the needed settings for a given customer, without the app knowing how many settings are needed, and how many customer products there are, in advance.
Example:
Setting
Product A1
+
Low Power
TRUE
Delayed Start
5 seconds
+
If the user was to then hit the plus (just an example method, open to suggestions here too), another column would appear where they can enter the Product name (E.G. "Product A2") and start editing the data for that product against the same Settings value:
Setting
Product A1
Product A2
+
Low Power
TRUE
FALSE
Delayed Start
5 seconds
5 seconds
+
Then when ready, and the form is saved, the form would submit like two separate forms, where "Setting" is repeated in both, and the Product specific columns are separated, as below:
Product:
Product A1
Settings:
Low Power = TRUE
Delayed Start = 5 seconds
Product:
Product A2
Settings:
Low Power = FALSE
Delayed Start = 5 seconds
Firstly, is the above possible? Logically, I can see it being possible, but I am too new to the framework to know where to start looking for the solution.
Secondly, if not possible as above, I can take in the products before this page, and then have a known number of columns on this page, but it would still need to work the same way, that they share the first column when submitting, and I would still not know the number of rows. If this reduces the complexity, then this is definitely an option.
Also, I understand this might be read as "do my project for me", and that could not be further from the truth. I want to understand how to do this, not just get it working and forget about it. I need to be able to support this app going forward too. So if you are even able to help me understand what I need to look up to get going in the right direction, I will still be incredibly grateful!
Thank you in advance.
I think what you want is a Formset
The default way that these display is the transpose of your illustration: clicking the "add" button creates another instance of the form at the bottom.
You can dynamically construct a form if you want to use a formset view to implement "add a set of entities of type X" where X was previously chosen by the user, and its relevant fields are determined at run-time.
Another approach I've seen (but not written!) is to construct the data grid using a front-end framework and POST it as JSON. Django can decode this JSON into Python data using a form with a single JSONField, and then process that data. Note that if you do this, you have to validate it to your satisfaction. You can't trust anything arriving from a possible hostile actor performing a POST. Django forms provide a good framework for validation, even if you never display them. Just instantiate them with a dict of unvalidated data and check form.is_valid()
I've stuck to generalities here. Hopefully this will give you some pointers to be getting on with.

BIP Report in Siebel Open UI

I created BIP report in Siebel Open UI. In my screen got two Applet :
Information Applet - use Information BC
Transaction Applet - use Transaction BC
In Information Applet got two drop down field which are Acc and Credit Note No (for drop down field i use calculated field). The link between this two Applet is Credit Note No.
So i set my link
Information BC - CreditNoteNo (Calculated Field)
Transaction BC - Credit Note No (BC Field).
But when the reports come out, only the data from Information BC was come out and there's no data from Transaction BC was display.
Kindly assist me on this.
In the My Reports view, where the generated reports are finally stored in Siebel, check the fields searchpec and bookmark, to see if the right searchspec was captured from the UI.
The UI applets have nothing to do with BIP except to capture the searchspec.
In Siebel Admininistration->BIP reports view for this report, try unchecking the selected records flag and try running the report again.
In Siebel Admininistration->BIP reports view, find the Integration Object of the report (left side applet under the top list applet). This integration object will be used to create the XML to generate the report. That integration object can be found in Siebel Tools, and it should have the same BCs as in the UI applets. Check the BO behind that IO, if that link is present.

Dynamics SL Field Length limit / Invoice Number length

If anyone can point me to the documentation for SL, which address the field length limits, right now i need to know about the length limit of invoice number.
I'm not quite sure where the documentation is, but the way I figure out the field length limits is with SQL Server Management Studio (SSMS). You can look at the databases and various tables/fields and figure out how big each field is as well as myriad of other information.
To find out the invoice number field length with SSMS I would connect to the Dynamics SL Company database (not the system database). The invoice number is a part of the accounts payable (AP) screens, so I would expand the APDOC table. Once you've done that you will see a few folders, one of which is the Columns folder. Expand the Columns folder and you will be presented with a list of fields. Within the parenthesis next to each of those fields you will find the length. In your case you will want to look at the InvcNbr field which is 15 characters for me, which I believe is the out of the box length.
An alternative method is to use customize mode within Dynamics SL. If you open up any screen that has the invoice number field, like Voucher and Adjustment Entry you can open up customize mode using the menu at the top of the screen. Next, open up the Property Window either by using the customize menu or hitting F4. Next, select the field you want to know the length for. For all character fields there will be a property called Mask that will be filled with several Xs. To figure out the field length, you simply need to count the number of Xs.
These 2 methods should be fairly future proof and will allow you to not have to search for the documentation for whatever version of Dynamics SL you might be on.

Using EXISTS and GetProfileAttrAsList in a Siebel calculated field

In our Siebel 7.8 application, we have three entities: service requests (SR), groups and employees. Each employee can be member of one or many groups, and each service request can be assigned to one or many groups too.
I have a requeriment to create a calculated field on the service request BC, which will indicate if the current user belongs to any of the groups asociated with the service request.
I already have created a multivalue field, called SR Groups, on the service request BC. I have also another multivalue field, Employee Groups; this one is on the Personalization Profile business component, which means that Siebel will generate automatically a multivalued profile attribute with the same name. All of the above is working as expected.
Next I've created this calculated field:
IIf(InList([SR Groups], GetProfileAttrAsList("Employee Groups")), "Y", "N")
It works, but it only checks if the SR's primary group is one of the current user's groups. I need to check all the SR groups, not only the primary one. So, I have created another calculated field:
IIf(EXISTS([SR Groups] = GetProfileAttrAsList("Employee Groups")), "Y", "N")
This one doesn't work. It shows always "N". However, according to this Bookshelf document:
a typical usage of the EXISTS operator in this scenario is EXISTS ([Targeted States] = GetProfileAttrAsList("State")). This does a many-to-many match of the MVG Business Component Field Targeted State against the MVG profile attribute State.
Which is exactly what I'm trying to do, without success. I can't see any difference between my expression and the example one. And there isn't any of the typical Bookshelf warnings, like "if you're going to use this function, you must activate the Link Specification property of the MVF", or anything like that.
The business component is based on a specialized class, CSSBCServiceRequest, but I don't think that should be a problem in this case - switching it to CSSBCBase doesn't fix the issue either. The only thing not working seems to be the EXISTS operator, which is pretty standard in Siebel.
Also, if I execute a query on the application with the expression EXISTS([SR Groups] = GetProfileAttrAsList("Employee Groups")), it doesn't filter out any service request as it should.
Any clues?
After a lot of testing, I've been able to figure out a workaround. I'd still like to know why my first attempt didn't work, but anyway...
Given that the problem with my first attempt seemed to be matching a many-to-many relationship between the MVF and the multivalued profile attribute, I've split it in two one-to-many matches:
In the link, I've stablished a search specification property. This way, my multivalue field will contain only groups associated with the user:
InList([Group], GetProfileAttrAsList("Employee Groups"))
In the BC, it only remains to check if there is any value in the MVF or not:
IIf(EXISTS([Filtered SR Groups] IS NOT NULL), "Y", "N")

How to make a date field to be autopopulated in Siebel CRM Desktop?

Whenever I create a new activity, I need a date field to be autopopulated ( it will be autopopulated but greyed out until and unless a checkbox next to it needs to be checked).
I perform a validation based on the date field, when a new activity is created. since the date field check box is not checked, it is not considering the value for the validation.
Any help or suggestion is appreciated.
Thanks.
Jaya Vignesh.
make use of predefault and postdefault values to populate current-date.
set field Read-only (BC field user property). You can find it under Business Component in object explorer.
Field read-only allows you to make a field read-only based on value of other field from same BC or joined field.
I perform a validation based on the date field, when a new activity is created. since the date field check box is not checked, it is not considering the value for the validation.
This requirement of yours isn't clear what exactly you want to validate. Since you are populating it bydefault, I don't find the significance in validating your own auto-populated data. well yet I provide a suggestion below
There are two types of validations, 1. Using configuration or 2. Using scripting. I am not pretty much sure if it can be achieved with configuration but scripting it is possible by overriding BusComp_presetFieldValue, BusComp_preWriteValue. The first one executed when you populate a field. And the latter one when you commit the record.
I have answer assuming your requirement. Let me know if you have any questions or clarifications required.
You can add the Predefault property of the field to be the following
System: TimeStamp