<?xml version="1.0" encoding="utf-16" standalone="yes"?>
<!--Created: 09.07.2015 15:24:57-->
<!--ACTOptimumVersion: 6.0.5581.26549-->
<AutoDataItems ACTOptimumVersion="6.0.5581.26549" Created="09.07.2015 15:24:57">
    <AutoDataControl Created="09.07.2015 15:24:57" ClassName="Melville_Schellmann.ACTOptimum3.Control.AutoData3.AutoData3" PrefClassVersion="1.0" ACTOptimumVersion="6.0.5581.26549">
        <Source>' #ScriptName: CreateOPNameFromFields
    ' #Description: DEUTSCH:
    '               Erzeugt einen eindeutigen Namen eines Datensatzes im Act!-Bereich "Verkaufschancen. Es werden die ersten zwei Zeichen des ausgewählten Prozessnamens verwendet, der Firmenname des verknüpften Kontaktes, sowie ein fortlaufender Zähler.
    '               
    '               ENGLISH:
    '               Creates a unique name for a opportunity record . It will be the first two characters of the selected process name - used the company name of the linked contact, as well as an ongoing counter.
    ' #Author: Robert Schellmann
    ' #Copyright: Melville-Schellmann
    Dim lMaxLengthCompany As Integer = 30
    Dim lMaxLengthProcess As Integer = 2
    Dim lMaxCounterDigits As Integer = 5
    Dim lCounterStartValue As Integer = 1

    Dim cNoCompanyName = "Person"
    Dim cOpportunityNameField = "TBL_OPPORTUNITY.NAME"
    Dim cScriptName = "NewOpportunityName"
    Dim cPrefPath As String = "Melville-Schellmann/ACTOptimum3/AutoData3/OpportunityCounter" ' Name des Einstellungswertes
    Dim cResetCounters As Boolean = False ' Auf True werden alle Prozess-Zähler gelöscht

    Dim sTrimmedCompany As String
    Dim sTrimmedProcess As String
    Dim sOPName As String
    Dim lCounter As Integer
    Dim sCounter As String
    Dim sPrefPath As String
    Dim oOp As Act.Framework.Opportunities.Opportunity
    Dim oContact As Act.Framework.Contacts.Contact
    Dim oConfigValue As Act.Shared.Config.Value = Nothing
    Dim oCurrentUserID As System.Guid
    Dim oPref As PrefManagerDB
    Dim sCurrentOPName As String

    Dim bNameExist As Boolean

    oOp = ACTApp.ApplicationState.CurrentOpportunity
    If oOp Is Nothing Then GoTo Abbruch

    If oOp.GetContacts(Nothing).Count = 0 Then
      MsgBox("Der aktuellen Verkaufschance ist kein Kontakt zugordnet.", MsgBoxStyle.Exclamation, cScriptName)
      GoTo Abbruch
    End If

    oContact = oOp.GetContacts(Nothing)(0)
    If oContact.Company Is Nothing OrElse oContact.Company.Trim = String.Empty Then
      sTrimmedCompany = cNoCompanyName.Trim
    Else
      sTrimmedCompany = oContact.Company.Trim
    End If
    If sTrimmedCompany.Length &gt; lMaxLengthCompany Then
      sTrimmedCompany = sTrimmedCompany.Substring(0, lMaxLengthCompany).Trim
    End If

    If oOp.Stage.Process.Name.Trim = String.Empty Then
      MsgBox("Der aktuellen Verkaufschance ist kein Prozess zugeordnet.", MsgBoxStyle.Exclamation, cScriptName)
      GoTo Abbruch
    End If
    sTrimmedProcess = oOp.Stage.Process.Name.Trim.Substring(0, lMaxLengthProcess)
    sPrefPath = cPrefPath &amp; "/" &amp; sTrimmedProcess

    oCurrentUserID = ACTApp.ActFramework.CurrentUser.ID
    oPref = New PrefManagerDB(ACTApp.ACTFramework)
    If cResetCounters = True Then
      ' Es werden für alle Zähler die Preferncewerte gelöscht.
      If Not oPref.PrefExist(cPrefPath) Then
        oPref.PrefSetInteger(cPrefPath, 0, oCurrentUserID, PrefOptionAttribute.PrefType.StandardPref)
      End If
      oPref.PrefRemove(cPrefPath, True)
      MsgBox(String.Format("Die Einstellungswerte ab dem Pfad '{0}' wurden aus der Datenbank entfernt.", cPrefPath), MsgBoxStyle.Information, cScriptName)
      GoTo Abbruch
    End If

    Dim oField As Act.Framework.MutableEntities.MutableEntityFieldDescriptor
    Dim oOPLookup As Act.Framework.Lookups.OpportunityLookup

    oField = ACTApp.ActFramework.Opportunities.GetFieldDescriptor(cOpportunityNameField, True)
    If oField Is Nothing Then
      MsgBox(String.Format("Es konnte nicht das Feld '{0}' gefunden werden.", cOpportunityNameField))
      GoTo Abbruch
    End If
    If Not oField.GetValue(oOp) Is Nothing Then
      sCurrentOPName = oField.GetValue(oOp).ToString.Trim
      If sCurrentOPName &lt;&gt; String.Empty Then
        If MsgBox(String.Format("Soll der Name '{0}' überschrieben werden?", sCurrentOPName), MsgBoxStyle.Question Or MsgBoxStyle.YesNo) = MsgBoxResult.No Then
          GoTo Abbruch
        End If
      End If
    End If
    Do
      If oPref.PrefExist(sPrefPath) Then
        lCounter = oPref.PrefGetInteger(sPrefPath, oCurrentUserID)
      Else
        lCounter = lCounterStartValue - 1
      End If
      lCounter += 1
      oPref.PrefSetInteger(sPrefPath, lCounter, oCurrentUserID, PrefOptionAttribute.PrefType.GlobalPref)
      sCounter = MSGlobal.formatNumber(lCounter, lMaxCounterDigits)
      sOPName = String.Format("{0}_{1}#{2}", sTrimmedProcess, sTrimmedCompany, sCounter)
      oOPLookup = ACTApp.ActFramework.Lookups.LookupOpportunitiesReplace(sOPName, Act.Framework.Lookups.OperatorEnum.EqualTo, oField)
      If oOPLookup.GetOpportunities(Nothing).Count &gt; 0 Then
        bNameExist = True
      Else
        bNameExist = False
      End If
      oPref.PrefSetInteger(sPrefPath, lCounter, oCurrentUserID, PrefOptionAttribute.PrefType.GlobalPref)
    Loop Until bNameExist = False
    oField.SetValue(oOp, sOPName)
    oOp.Update()

    Abbruch:
    Return String.Empty</Source>
        <SourceComment>Begriff: {0}</SourceComment>
        <TargetFields></TargetFields>
        <MsgText>{0}</MsgText>
        <Picklist></Picklist>
        <Multiple>False</Multiple>
        <Expandable>True</Expandable>
        <OverwriteAlways>True</OverwriteAlways>
        <CopyToClipboard>False</CopyToClipboard>
        <ShowMsgBox>False</ShowMsgBox>
        <PositionMode>1</PositionMode>
        <FlatStyle>Flat</FlatStyle>
        <AutoDataText>Name neue Verkaufschance</AutoDataText>
        <TextAlign>MiddleCenter</TextAlign>
        <AutoDataFormSize>160; 270</AutoDataFormSize>
        <TooltipText>Ermittelt neuen Vorgangsbezeichner</TooltipText>
        <RefreshLoadedViews>False</RefreshLoadedViews>
    </AutoDataControl>
</AutoDataItems>