Ako sanhi ng BDC error sa linggong ito na ipinahayag sa sarili nito sa user interface at sa mga 12 hive log at runtime.
Una, ito ay lumitaw sa interface ng gumagamit:
Hindi makahanap ng mga patlang upang ipasok ang lahat ng mga Halaga ng Tagatukoy upang tamang magsagawa ng isang SpecificFinder MethodInstance sa Pangalan … Ensure input Parameters have TypeDescriptors associated with every Identifier defined for this Entity.
Narito ang isang screen shot:
I could also cause this message to appear in the 12 hive log at will (using my patented high-tech-don’t-try-this-at-home "mysterious errors" pamamaraan):
11/14/2007 09:24:41.27 w3wp.exe (0x080C) 0x0B8C SharePoint Portal Server Business Data 6q4x High Exception in BusinessDataWebPart.OnPreRender: System.InvalidOperationException: The Identifier value ”, of Type ”, is invalid. Expected Identifier value of Type ‘System.String’. at Microsoft.Office.Server.ApplicationRegistry.MetadataModel.Entity.FindSpecific(Object[] subIdentifierValues, LobSystemInstance lobSystemInstance) at Microsoft.SharePoint.Portal.WebControls.BdcClientUtil.FindEntity(Entity entity, Object[] userValues, LobSystemInstance lobSystemInstance) at Microsoft.SharePoint.Portal.WebControls.BusinessDataItemBuilder.GetEntityInstance(View desiredView) at Microsoft.SharePoint.Portal.WebControls.BusinessDataDetailsWebPart.GetEntityInstance() at Microsoft.SharePoint.Portal.WebControls.BusinessDataDetailsWebPart.SetDataSourceProperties()
I searched around and found some leads in the MSDN forum, but they weren’t enough for me to understand what I was doing wrong. I watched a webcast by Ted Pattison that my company has squirreled away on a server and came to realize my problem.
In my ADF, I’m connecting to a SQL database as shown:
<Ari-arian Pangalan="RdbCommandText" Uri="System.String">
<![CDATA[
SELECT
SETID, CARRIER_ID, EFFDT, DESCR, EFF_STATUS, TAXPAYER_ID, NETWORK_ID, FRT_FORWARD_FLG, ALT_NAME1, ALT_NAME2, LANGUAGE_CD,
COUNTRY, ADDRESS1, ADDRESS2, ADDRESS3, ADDRESS4, CITY, NUM1, NUM2, HOUSE_TYPE, ADDR_FIELD1, ADDR_FIELD2, ADDR_FIELD3,
COUNTY, STATE, POSTAL, GEO_CODE, IN_CITY_LIMIT, COUNTRY_CODE, PHONE, EXTENSION, FAX, LAST_EXP_CHK_DTTM, FREIGHT_VENDOR,
INTERLINK_DLL, TMS_EXCLUDE_FLG
FROM
dbo.PS_CARRIER_ID_VW WITH (nolock)
WHERE
(SETID <> 'SHARE') at
(lower(CARRIER_ID) >= lower(@MinId)) at
(lower(CARRIER_ID) <= lower(@ MaxId)) at
(lower(DESCR) LIKE lower(@InputDescr))
]]>
</Ari-arian>
I was provided that SQL from a DBA person and I’m given to understand that it’s a espesyal view they created just for me. The unique key there is CARRIER_ID.
Here is the bug I introduced:
<Identifiers>
<Identifier Pangalan="CARRIER_ID" TypeName="System.String" />
<Identifier Pangalan="DESCR" TypeName="System.String" />
</Identifiers>
Sa isang lugar sa kahabaan ng linya, I had managed to confuse myself over the meaning of <Identifiers> and added DESCR even though it’s not actually an identifier. I took DESCR out of the identifiers set and presto! It all worked.
I hope this saves someone some grief 🙂