Jestem użytkownikiem oprogramowania z istniejącymi (historycznymi) profilami.
Ze swojej strony uważam je za nieco "staromodne".
Chciałbym zautomatyzować kilka rzeczy:
Automatyczna aktualizacja przeglądarki, na przykład o nazwę sesji systemu Windows. (Environ("NAZWA UŻYTKOWNIKA"))
Automatyczne tworzenie specyficznego dla konfiguracji parametru o nazwie "Kod produktu"
I 3 rzecz, w niektórych przypadkach, gdy bierzemy istniejącą część jako istniejącą bazę, chciałbym zastąpić datę w kartuszu , który wywołujący na parametr daty utworzenia pliku, przez aktualną datę.
Czy masz przykłady kodu lub praktyczne rozwiązania?
Jeśli chodzi o aktualną datę, umieściłem jako link do adnotacji "SW-Date Courte(ShortDate)", czyli aktualną datę, kiedy ją otwierasz. Ale jest też długa randka itp...
Jeśli chodzi o edycję swojego imienia i nazwiska w kartridżu,
Tę ostatnią musisz edytować, dodać notatkę, która będzie w miejscu nazwiska autora w tabelce rysunkowej, zastosować właściwość do tej notatki. Utwórz właściwość dla pliku, przypisz nazwę do tej właściwości, w poniższym przykładzie jest to "Sesja", wpisz "text" i ustaw wartość $PRP: "Ostatnio zapisane przez", kliknij ok.
Na liście Link to Property (Połącz z właściwością) po prostu wybierz właściwość Session, a notatka zmieni się na nazwę użytkownika komputera.
Ustawiłem formularz właściwości niestandardowych, data jest wybierana w małym kalendarzu bardzo praktycznym, nazwiska desinnatorów / weryfikatorów / zatwierdzających są wybierane na listach rozwijanych, wszystko aż do indeksu C, aby móc szybko rozwijać stare plany. Reszta jest wykonywana automatycznie, nazwy planów = nazwy plików, ....
Ta metoda pozwala szybko skompletować wszystkie wkłady wszystkich arkuszy w ten sam sposób, a więc, aby mieć różne arkusze, musiałem zrobić kasetę 3D i trzeba żonglować warstwami, aby ukryć niektóre niestandardowe właściwości. Nie musimy jednak pracować nad wieloma folio we własnym zakresie, więc ta metoda jest naprawdę przydatna, ponieważ regularnie edytujemy stare plany.
Automatyczna aktualizacja przeglądarki, na przykład o nazwę sesji systemu Windows. (Environ("NAZWA UŻYTKOWNIKA")). - Wersja "ostatniego użytkownika" jest dobra, ale mi nie odpowiada. - Chciałbym mieć możliwość aktualizacji pola za pomocą 1 kliknięcia
Automatyczne tworzenie specyficznego dla konfiguracji parametru o nazwie "Kod produktu" zwłaszcza, jeśli używam utworów historycznych.
W przypadku aktualizacji daty ustawienie "data drukowania" nie jest złe, ale nie działa historycznie. A.Leblanc : Jeśli masz przykład, który mógłbym zaadaptować, to byłoby fajnie.
Witam Podobnie jak a.leblanc, ustawiłem formularz właściwości niestandardowych w postaci zewnętrznego programu wywoływanego za pomocą makra, ten formularz może być również makrem bezpośrednio w zależności od jego złożoności. Ten formularz umożliwia utworzenie wszystkich niestandardowych właściwości w nowym 3D, ale także pobranie wszystkich właściwości istniejącego 3D i zmodyfikowanie ich w razie potrzeby. Stworzyłem kilka niestandardowych właściwości (w moim przypadku około trzydziestu), a w szczególności autora, twórcę wersji (niekoniecznie jest on pierwotnym autorem), datę utworzenia, datę wersji, oznaczenie wersji, oznaczenie itp. Dostaję też materiał, nazwę pliku (w moim przypadku identyczną z kodem artykułu), masę itp. i oczywiście napełniam mój wkład 2D tymi właściwościami. Właściwości Author i ReviewCreator są oczywiście równe nazwie użytkownika komputera, daty utworzenia i zmiany są datami dnia (tylko jeśli są puste w momencie ładowania makra dla daty utworzenia) i można je edytować za pomocą małego kalendarza (do zarządzania historią lub kopiami części). Aby zarządzać niestandardowymi właściwościami przez API, musisz przejść do http://help.solidworks.com/2016/English/api/sldworksapi/SOLIDWORKS.Interop.sldworks~SOLIDWORKS.Interop.sldworks.IConfiguration~CustomPropertyManager.html , wszystko inne to tylko programowanie i testowanie w zależności od tego, co chcesz zrobić.
Aby nawiązywać do mojego poprzedniego postu, oto 3 przykłady funkcji (w C#) do tworzenia, pobierania i usuwania właściwości niestandardowych, uważaj, są to tylko przykłady z linkami w polach tekstowych z formularza użytkownika:
// Exemple de fonction pour créer les propriétés personnalisées
private void CreerProprietes()
{
try
{
ModelDoc2 swModel = null;
swModel = ((ModelDoc2)(Program.swapp.ActiveDoc));
CustomPropertyManager PropMgr = null;
CustomPropertyManager PropMgr0 = null;
ConfigurationManager swConfigMgr;
Configuration swConfig;
swConfigMgr = swModel.ConfigurationManager;
swConfig = swConfigMgr.ActiveConfiguration;
int nb = 3;
string[] PropName = new string[nb];
string[] PropVal = new string[nb];
int i = 0;
PropName[i] = CodeArticle;
PropVal[i] = textBox1.Text.Trim();
i++;
PropName[i] = CreateDate;
if (textBox9.Text == "")
{
PropVal[i] = System.DateTime.Today.ToShortDateString();
}
else
{
PropVal[i] = textBox9.Text.Trim();
}
i++;
PropName[i] = Dessinateur;
if (textBox19.Text == "")
{
PropVal[i] = System.Environment.UserName.ToUpperInvariant();
}
else
{
PropVal[i] = textBox19.Text;
}
i++;
PropMgr0 = swModel.Extension.get_CustomPropertyManager("");
int value = 0;
for (int m = 0; m <= (nb - 1); m++)
{
value = PropMgr0.Add2(PropName[m], (int)swCustomInfoType_e.swCustomInfoText, PropVal[m]);
}
}
catch (Exception)
{
MessageBox.Show("Erreur lors de la création des propriétés personnalisées, Contactez l'administrateur.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Stop);
}
}
// Exemple de fonction pour récupérer les propriétés personnalisées
private void ObtenirProprietes()
{
try
{
ModelDoc2 swModel = null;
swModel = ((ModelDoc2)(Program.swapp.ActiveDoc));
CustomPropertyManager PropMgr = null;
ConfigurationManager swConfigMgr;
Configuration swConfig;
swConfigMgr = swModel.ConfigurationManager;
swConfig = swConfigMgr.ActiveConfiguration;
int nNbrProps;
int j;
object[] vPropNames;
string valOut;
string resolvedValOut;
int custPropType;
PropMgr = swConfig.CustomPropertyManager;
nNbrProps = PropMgr.Count;
vPropNames = (object[])PropMgr.GetNames();
for (j = 0; j <= nNbrProps - 1; j++)
{
PropMgr.Get2(vPropNames[j].ToString(), out valOut, out resolvedValOut);
custPropType = PropMgr.GetType2(vPropNames[j].ToString());
if (vPropNames[j].ToString() == CodeArticle)
{
textBox1.Text = resolvedValOut.ToString();
}
if (vPropNames[j].ToString() == CreateDate)
{
textBox9.Text = resolvedValOut.ToString();
}
if (vPropNames[j].ToString() == Dessinateur)
{
textBox19.Text = resolvedValOut.ToString();
}
}
}
catch (Exception)
{
MessageBox.Show("Erreur lors de l'obtention des propriétés personnalisées, Contactez l'administrateur.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Stop);
}
}
// Exemple de fonction pour effacer toutes les propriétés personnalisées
private void EffacerProprietes()
{
try
{
ModelDoc2 swModel;
swModel = ((ModelDoc2)(Program.swapp.ActiveDoc));
CustomPropertyManager PropMgr;
ConfigurationManager swConfigMgr;
Configuration swConfig;
swConfigMgr = swModel.ConfigurationManager;
swConfig = swConfigMgr.ActiveConfiguration;
PropMgr = swConfig.CustomPropertyManager;
int nNbrProps;
object[] vPropNames;
nNbrProps = PropMgr.Count;
vPropNames = (object[])PropMgr.GetNames();
int h;
for (h = 0; h <= nNbrProps - 1; h++)
{
object[] configNameArr = null;
string configName = null;
int j = 0;
configNameArr = (object[])swModel.GetConfigurationNames();
for (j = 0; j <= configNameArr.GetUpperBound(0); j++)
{
configName = (string)configNameArr[j];
swConfig = (Configuration)swModel.GetConfigurationByName(configName);
PropMgr = swModel.Extension.get_CustomPropertyManager(configName);
PropMgr.Delete(vPropNames[h].ToString());
}
PropMgr = swModel.Extension.get_CustomPropertyManager("");
PropMgr.Delete(vPropNames[h].ToString());
}
return;
}
catch (Exception)
{
MessageBox.Show("Erreur lors de l'effacement des propriétés personnalisées, Contactez l'administrateur.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Stop);
}
}
SmartPropeties może być początkiem rozwiązania. Będziesz mógł również zarządzać właściwościami zgodnie z konfiguracją swojej części/zespołu, zgodnie z żądaniem.