Initial Commit of the PDM project (ready for DWS migration)

This commit is contained in:
will
2026-04-20 08:42:38 -05:00
commit dda7b664e7
2721 changed files with 442772 additions and 0 deletions

View File

@@ -0,0 +1,235 @@
<html>
<head>
<title>Creating Serial Numbers (C#)</title>
<meta name=MS-HKWD content="Serial numbers">
<meta name=MS-HKWD content="Add-ins,C#">
<meta name=MS-HKWD content="C# add-ins, serial numbers ">
<meta http-equiv="Content-Language" content="en-us">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<link rel="stylesheet" type="text/css" href="ApiHelp.css">
<style>
<!--
div.Section1
{page:Section1;}
.auto-style2 {
color: #2B91AF;
}
-->
</style>
</head>
<body>
<h1><span style="font-weight: normal; font-size: 7.5pt;">SOLIDWORKS PDM Professional API Help</span></h1>
<h1>Creating Serial Numbers (C#)</h1>
<p class=MsoNormal><span lang=EN-US style='font-family:Verdana'>This
sample shows how to generate serial numbers for file data cards using
an add-in written in Visual C#.</span></p>
<p class="MsoNormal"><font face="Verdana"><b>NOTES:</b> </font></p>
<ul>
<li>
<p class=MsoNormal>
<span lang=EN-US style='font-family:Verdana;
mso-ansi-language:EN-US'>Because SOLIDWORKS PDM Professional cannot force a reload of
add-ins if they are written in .NET, all client machines must be restarted to ensure that the latest version of the add-in is used.<o:p></o:p></span></p>
</li>
<li>
<p class=MsoNormal><span lang=EN-US style='font-family:Verdana'>SOLIDWORKS
PDM Professional recommends that serial numbers be generated using the built-in format strings or lists.
They provide better performance than serial numbers generated by add-ins
or serial numbers from files. Write an add-in to generate the serial
number only if built-in format strings or lists are insufficient.</span><font face="Verdana"><span lang=EN-US>&nbsp;</span>&nbsp;</font></p>
</li>
<li>
<p class=MsoNormal><span lang=EN-US style='font-family:Verdana'>The
differences between serial number generation and <a href="csharpreactor.htm">other types of hooks</a>
are:</span></p>
<ul>
<li>
<p class=MsoNormal><span style="font-family: Verdana">H</span><span lang=EN-US style='font-family:Verdana'>ook you register in
your
<a href="EPDM.Interop.epdm~EPDM.Interop.epdm.IEdmAddIn5~GetAddInInfo.html">IEdmAddIn5::GetAddInInfo</a>
method. </span></p></li>
<li>
<p class=MsoNormal><span style="font-family: Verdana">C</span><span lang=EN-US style='font-family:Verdana'>ontents of your
<a href="EPDM.Interop.epdm~EPDM.Interop.epdm.IEdmAddIn5~OnCmd.html">IEdmAddIn5::OnCmd</a> method.</span></p>
</li>
</ul>
</li>
</ul>
<ol style="font-family: Verdana; font-size: 8pt">
<li>
<p class=MsoNormal><span style="font-family: Verdana">Follow </span><span lang=EN-US><font face="Verdana">
<a href="csharpmenuitem.htm">Creating Menu Commands (C#)</a> to
create a basic add-in.</font></span></p>
</li>
<li>
<p class=MsoNormal><span style="font-family: Verdana">Register a hook to
notify</span><span lang=EN-US style='font-family:Verdana'>
your add-in when a serial
number needs to be generated. Implement IEdmAddIn5::GetAddInInfo as follows:</span></p>
<blockquote>
<p style="font-family: Courier New; font-size: 13; color: black; background: white" class="APICODE">
<span style="color:blue;">public</span>&nbsp;<span style="color:blue;">void</span>&nbsp;GetAddInInfo(<span style="color:blue;">ref</span>&nbsp;<span style="color:#2b91af;">EdmAddInInfo</span>&nbsp;poInfo,&nbsp;<span style="color:#2b91af;">IEdmVault5</span>&nbsp;poVault,&nbsp;<span style="color:#2b91af;">IEdmCmdMgr5</span>&nbsp;poCmdMgr)<br>
{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:green;">//Return&nbsp;information&nbsp;about&nbsp;this&nbsp;add-in&nbsp;to&nbsp;the&nbsp;Administrate&nbsp;Add-ins&nbsp;dialog</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;poInfo.mbsAddInName&nbsp;=&nbsp;<span style="color:#a31515;">&quot;My&nbsp;serial&nbsp;number&nbsp;generator&quot;</span>;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;poInfo.mbsCompany&nbsp;=&nbsp;<span style="color:#a31515;">&quot;The&nbsp;name&nbsp;of&nbsp;my&nbsp;company&quot;</span>;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;poInfo.mbsDescription&nbsp;=&nbsp;<span style="color:#a31515;">&quot;Implements&nbsp;serial&nbsp;numbers&quot;</span>;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;poInfo.mlAddInVersion&nbsp;=&nbsp;1;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;poInfo.mlRequiredVersionMajor&nbsp;=&nbsp;5;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;poInfo.mlRequiredVersionMinor&nbsp;=&nbsp;2;<br>
&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:green;">//Notify&nbsp;that&nbsp;a&nbsp;serial&nbsp;number&nbsp;needs&nbsp;to&nbsp;be&nbsp;generated</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;poCmdMgr.AddHook(<span style="color:#2b91af;">EdmCmdType</span>.EdmCmd_SerialNo);<br>
}</p>
</blockquote>
<li>
<p class=MsoNormal style='background:white'>
<span style="font-family: Verdana">Implement IEdmAddIn5::OnCmd as follows</span><span lang=EN-US style='font-family:Verdana'>:</span></p></li>
<blockquote>
<p style="font-family: Courier New; font-size: 13; color: black; background: white" class="APICODE">
<span style="color:blue;">public</span>&nbsp;<span style="color:blue;">void</span>&nbsp;OnCmd(<span style="color:blue;">ref</span>&nbsp;<span style="color:#2b91af;">EdmCmd</span>&nbsp;poCmd,&nbsp;<span style="color:blue;">ref</span>&nbsp;<span class="auto-style2">EdmCmdData</span>[]&nbsp;ppoData)<br>
{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:green;">//Check&nbsp;the&nbsp;upper&nbsp;and&nbsp;lower&nbsp;bounds&nbsp;of&nbsp;the&nbsp;array&nbsp;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">int</span>&nbsp;Index&nbsp;=&nbsp;ppoData.GetLowerBound(0);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">int</span>&nbsp;last&nbsp;=&nbsp;ppoData.GetUpperBound(0);<br>
&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">if</span>&nbsp;(Index&nbsp;&lt;=&nbsp;last)&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">int</span>&nbsp;cnt;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cnt&nbsp;=&nbsp;last&nbsp;-&nbsp;Index&nbsp;+&nbsp;1&nbsp;;<br>
&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:green;">//Create&nbsp;a&nbsp;temporary&nbsp;array&nbsp;to&nbsp;which&nbsp;you&nbsp;have&nbsp;full&nbsp;access</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#2b91af;">EdmCmdData</span>[]&nbsp;tmpArr;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpArr&nbsp;=&nbsp;(<span style="color:#2b91af;">EdmCmdData</span>[])ppoData;&nbsp;<br>
&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:green;">//Generate&nbsp;serial&nbsp;numbers&nbsp;for&nbsp;all&nbsp;of&nbsp;the&nbsp;affected&nbsp;files&nbsp;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#2b91af;">String</span>&nbsp;CounterVal;&nbsp;<br>
&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">while</span>&nbsp;(Index&nbsp;&lt;=&nbsp;last)&nbsp;{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CounterVal&nbsp;=&nbsp;tmpArr[Index].mlLongData1.ToString()&nbsp;;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#2b91af;">String</span>&nbsp;s;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;=&nbsp;<span style="color:#a31515;">&quot;My&nbsp;serno(&quot;</span>&nbsp;+&nbsp;CounterVal&nbsp;+&nbsp;<span style="color:#a31515;">&quot;)&quot;</span>&nbsp;;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpArr[Index].mbsStrData1&nbsp;=&nbsp;s&nbsp;;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Index&nbsp;=&nbsp;Index&nbsp;+&nbsp;1&nbsp;;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>
&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:green;">//Return&nbsp;the&nbsp;updated&nbsp;data&nbsp;</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ppoData&nbsp;=&nbsp;tmpArr;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>
}</p>
<p style='background:white'>
<span lang=EN-US style="font-size:10pt;font-family:Courier New">
<br>
</span>
<span lang=EN-US style='font-family:Verdana'>The second argument to
OnCmd
is an array of <a href="EPDM.Interop.epdm~EPDM.Interop.epdm.EdmCmdData.html">EdmCmdData</a> structures. There is
one element in the array for each file that is affected by the call. </span><span lang=EN-US style='font-family:Verdana'>
See EdmCmdData for a complete list
of members and their descriptions.<o:p></o:p></span></p>
</blockquote>
<li>
<p class=MsoNormal style='background:white'>
<span lang=EN-US style='mso-ansi-language:EN-US'>Click <b>Build &gt; Build
Solution</b> to build the add-in.</span></p></li>
<li>
<span lang="en-us">I</span><span lang=EN-US style='mso-ansi-language:EN-US'>nstall
the add-in through the SOLIDWORKS PDM Professional
Administration tool: <br>&nbsp;</span><ol style="font-family: Verdana; font-size: 8pt">
<li><span lang="en-us">Open</span><span lang=EN-US style='mso-ansi-language:EN-US'> the SOLIDWORKS
PDM Professional Administration tool.<br>&nbsp;</span></li>
<li><span lang=EN-US style='mso-ansi-language:EN-US'>Expand the vault where
you want to install this add-in and log in as Admin.<br>&nbsp;</span></li>
<li><span lang="en-us">Right-click <b>Add-ins</b> and click <b>New
Add-in</b>.<b><br>
&nbsp;</b></span></li>
<li>B<span lang="en-us">rowse to </span>
<span lang=EN-US style='mso-ansi-language:EN-US'>
<i style='mso-bidi-font-style:
normal'>project_path</i><span style='mso-bidi-font-style:
normal; '><i>\</i></span></span><span style='mso-bidi-font-style:
normal; mso-ansi-language:EN-US' lang="EN-US"><i>project_name\project_name</i><b>\bin\Debug</b>,
click <i>project_name</i><b>.dll</b> and <b>EPDM.Interop.epdm.dll</b>.<br>&nbsp;</span></li>
<li><span lang="en-us">Click <b>Open</b>.<br>
&nbsp;</span></li>
<li>Click <b>OK</b>.<br>
&nbsp;</li>
<li>Click <b>OK</b>.</li>
</ol>
</li>
<li>
<p class=MsoNormal style='background:white'><font face="Verdana">
<span lang=EN-US>Right-click the <strong>Serial Numbers</strong> node in the
tree and click </span></font><span style='font-family:Verdana' lang="EN-US">
<strong>New Serial
Number</strong></span><font face="Verdana"><span lang=EN-US>. </span></font>
</p></li>
<li>
<p class=MsoNormal style='background:white'><font face="Verdana">
<span lang=EN-US>Create a new serial number
in the <b>Name</b> field and select </span></font>
<span lang=EN-US style='font-family:Arial'><strong>
<span style='font-family:Verdana'>Serial number from add-in</span></strong></span><font face="Verdana"><span lang=EN-US>
in the Type dropdown.<br>
<br>
<img border="0" src="serno.gif" width="497" height="286"></span></font></p>
<p class=MsoNormal style='background:white'><font face="Verdana">
<span lang=EN-US>The name of your add-in is displayed in<b> Name of add-in</b>.</span></font></p>
<li>
<p class=MsoNormal style='background:white'><font face="Verdana">
<span lang=EN-US>After ensuring that your add-in is selected, click
</span></font><span lang=EN-US style='font-family:Arial'><strong>
<span style='font-family:Verdana'>OK.</span></strong></span></p>
<p class=MsoNormal style='background:white'><font face="Verdana">
<span lang=EN-US>Now you can connect the add-in serial number to controls in
your file data cards. </span></font></p>
<li>
<p class=MsoNormal style='background:white'>
<span style="background-position: 0 0"><font face="Verdana">Click <b>
Cards &gt; File Cards</b>, double-click <b>Text Card</b>,</font></span><font face="Verdana"><span lang=EN-US> and click the </span></font>
<span lang=EN-US style='font-family:Arial'><strong>
<span style='font-family:Verdana'>Title</span></strong></span><span lang=EN-US><font face="Verdana">
control.</font><o:p></o:p></span></p></li>
</li>
<li>
<p class=MsoNormal style='background:white'>
<span style="background-position: 0 0"><font face="Verdana">I</font></span><span lang=EN-US><font face="Verdana">n
the Default value group box on the Edit-box properties panel, </font></span><span style="background-position: 0 0">
<font face="Verdana">click</font></span><span lang=EN-US><font face="Verdana"> <b>Serial number</b> and
select the serial number that you created in step 7.</font><o:p></o:p></span></p></li>
<p class=MsoNormal style='background:white'>
<span lang=EN-US style='font-size:
10.0pt;font-family:Arial'>&nbsp;&nbsp;&nbsp;&nbsp;
<o:p><img border="0" src="defvalserno.gif" width="969" height="797"></o:p></span></p>
<li>
<p class=MsoNormal style='background:white'><font face="Verdana">
<span lang=EN-US>Save the card and exit the Card Editor.</span></font></p></li>
<li>
<p class=MsoNormal style='background:white'>
<span style="background-position: 0 0"><font face="Verdana">C</font></span><font face="Verdana"><span lang=EN-US>reate a new text file
by right-clicking in a File Explorer vault view and
clicking </span></font><span lang=EN-US><strong><font face="Verdana">New &gt;
Text File</font></strong><span lang=EN-US style='font-family:Arial'><font face="Verdana">.
<br><br>The file data card displays a serial number in <b>Title</b> of the newly added
file.</font><o:p></o:p></span></span></p></li>
</ol>
<blockquote>
<p class=MsoNormal style='background:white'>
<img border="0" src="txtpropserno.gif" width="643" height="286"></p>
</blockquote>
</body>
</html>