I am starting a new project and would like to create a few custom manufacturer's plumbing databases. I would think that this should be possible by copying delivered MDB and XML files and modifying them as needed. Are there any specific issues I should be aware of?
Yes, you should be able to copy the existing layout and structure used for an existing manufacturer's catalog, by default located under the C:\ProgramData\Bentley\AECOsimBuildingDesigner V8i Ss4\WorkSpace\BuildingDatasets\Dataset_Name\datagroupcatalogs\plumbing_lib folder, and modify it as needed to suit your new manufacturer's catalog. Just be sure that your XML and MDB files include a complete matching set of component types and properties.
For example, let's assume you've defined these four main properties in your custom manufacturer.xml file:
<Property definition="Properties" name="Properties/@ProductCode" value="CODE" dbname="PIECE_MARK" />
<Property definition="Properties" name="Properties/@Manufacturer" value="MANUFACTURER" dbname="MANUFACT" />
<Property definition="Properties" name="Properties/@Type" value="TYPE" dbname="SHORT_DESC" />
<Property definition="EndSpec2_22" name="EndSpec2_22/End1/@diameter" value="D1" dbname="MAIN_SIZE" />
You should also have have equivalent columns for all four of these properties in the matching *.mdb database file for that component type, and values populated for each row. In the above case the PIECE_MARK database column name is mapped to the DataGroup property "CODE". It is important that the CODE property, whatever it is mapped to, has a unique value for each corresponding entry (row) in the database in order to select the correct record values in the Manufacturer Catalog dialog box.
Here is a simple example of the "StraightPipe" component from the delivered "generic" catalog. This is the appropriate section defined in generic.xml:
<Catalog name="BMP_StraightPipe">
<CodeSubstitutes>
<Property definition="Properties" name="Properties/@ProductCode" value="CODE" dbname="COMP_INDX"/>
<Property definition="Properties" name="Properties/@Manufacturer" value="MANUFACTURER" dbname="CATALOG"/>
<Property definition="Properties" name="Properties/@Material" value="MATERIAL" dbname="MATERIAL"/>
<Property definition="Properties" name="Properties/@Type" value="TYPE" dbname=""/> <Property definition="EndSpec1_2" name="EndSpec1_2/End1/@diameter" value="D1" dbname="MAIN_SIZE"/>
<Property definition="CustomParamBMPPipe" name="CustomParamBMPPipe/PIPE_OD_M" value="PIPE_OD_M" dbname="PIPE_OD_M"/>
</CodeSubstitutes>
<Database Filename="$(BMECHDIR_PLUMBING_LIB)generic.mdb" TableName="PIPE" Unit="IM"/>
<SearchCriteria NumOfnames="4" name1="CODE" name2="D1" name3="PIPE_OD_M" name4="MATERIAL"/>
<QueryCriteria NumOfParams="2" Param1="D1" Param2="MATERIAL"/>
</Catalog>
This section includes the Catalog Name; the applicable properties being mapped to database column names; the MDB file name, its location and the table name; and finally the sequence in which they should be displayed.
Now here is the corresponding "Pipe" table from generic.mdb (some columns are hidden):
You can see how the "dbname" properties defined in the XML file are the column names in the MDB file.
Also, note that if the values used in the MDB file's MAIN_SIZE property include a unit string such as "mm"; e.g., 25mm, you will need to include the following conversion rule in your XML file:
<CONVERSIONRULE>
<D1>
<IGNORE>
<Stringignore name="mm" />
</IGNORE>
</D1>
</CONVERSIONRULE>
However, if the MAIN_SIZE value does not include the "mm" string (or any other) and instead uses only an integer value, you do not need to include the conversion rule.
See the section "Establishing Links to Delivered Databases" in the delivered AECOsim Building Designer help.
I might be wrong, but the example doesn't seem to work if <ConversionRule> is used for "D1" property with the shown database table. Because it seems the "mm" part is only "ignored" when the data is received from the database. When AECOSim queries a user-typed "D1" value from the Datagroup Instance dialog, "mm" won't be "un-ignored" and added to the query string that sent to the database, and thus, the query won't return any match.