Op het tabblad Documenten geeft u basisinstellingen op die gebruikt worden wanneer u werkt met documentbeheer. Met documentbeheer koppelt u documenten zoals tekeningen en offertes aan klanten, leveranciers, verkooporders, productiedossiers, etc. zodat ze op de juiste plaats beschikbaar zijn.
Documentmanagementsysteem aanwezig
Als het veld Document managementsysteem aanwezig is geactiveerd, gaat Isah ervan uit dat er een extern documentmanagementsysteem aanwezig is. Als u gebruikmaakt van een aan Isah gekoppeld documentmanagementsysteem, verricht u het documentbeheer in dat pakket. Documentgegevens wijzigen of verwijderen doet u dus in het documentmanagementsysteem. In Isah koppelt u de documenten en voert u met scripts in het menu Bewerken verwerkingen uit, zoals openen van het document in Isah.
Is het veld geactiveerd, dan kunt u geen documenten meer toevoegen, wijzigen of verwijderen in het scherm Documenten.
Automatische documentregistratie bij invoeren documentkoppeling
Voor een snelle documentregistratie activeert u het veld Automatische documentregistratie bij invoeren documentkoppeling. Als u werkt met snelle documentregistratie, dan wordt het document automatisch geregistreerd als u het document koppelt.
Dit veld is leeg als u met een documentmanagementsysteem werkt of als u documenten centraal wilt registreren voordat u ze gaat koppelen aan records. Als u werkt met centraal beheer van documenten, registreert u een document eenmalig in het scherm Documenten en koppelt het document vervolgens op eenvoudige wijze aan alle records waarbij het document hoort.
Documentregistratie verwijderen bij verwijderen laatste koppeling
Met het veld Documentregistratie verwijderen bij verwijderen laatste koppeling maakt u het gemakkelijker om documenten uit Isah te verwijderen. Is dit veld geactiveerd en verwijdert u de laatste koppeling naar een document, dan wordt automatisch de registratie van het document ook ongedaan gemaakt. Als dit veld leeg is, dient u het verwijderen in twee stappen uit te voeren: eerst verwijdert u de koppeling en vervolgens het document.
Registreert u documenten centraal, dan is het mogelijk om gebruikers wel rechten te geven voor het koppelen en ontkoppelen van documenten maar niet voor het beheer ervan. In dat geval moet dit veld leeg zijn, omdat gebruikers samen met de laatste koppeling anders ook het document zelf verwijderen.
Als de instelling is geactiveerd, worden de laatste koppeling en het document zelf samen verwijderd als aan de volgende voorwaarden is voldaan:
Eventuele documentrechten die zijn toegekend aan het document hebben geen invloed op het verwijderen van het document. De registratie wordt verwijderd, inclusief de rechten.
Hier geeft u de hoofdmap op waarin de bestanden opgeslagen worden die zijn aangemaakt na het uitvoeren van de verwerking Verzenden documenten of het gebruik van de Outlook Add-in.
Als u dit veld activeert, dan maakt Isah bij het opslaan van documenten vanuit de functie Verzenden documenten en de Outlook Add-in een aparte submap aan voor de verschillende entiteiten waarom het kan gaan. Entiteiten zijn de Isah-gegevens waaraan een document gekoppeld kan worden, zoals een klant, inkoopfactuur, artikel, personeelslid etc. Onder de hoofdmap verschijnt dus bijvoorbeeld een submap die 'Klanten' of 'Artikelen' heet, waarin Isah de documenten met dat entiteittype opslaat.
Als documenten opgeslagen worden, bijvoorbeeld bij de functie Verzenden documenten of de Outlook Add-in, worden automatisch een pad en bestandsnaam aangemaakt als die zijn ingesteld. Met een script kunt u desgewenst andere bestandsnamen of een andere indeling in documenten hanteren, zoals hieronder in het voorbeeldscript wordt geïllustreerd. Dat zou u bijvoorbeeld kunnen doen om facturen in verschillende talen aan te bieden en deze vervolgens in aparte mappen op te slaan.
Een script dat u hier opgeeft, maakt u aan in het scherm Scripts.
Voorbeeldscript
function BeforeProcessFileName(sOutputFileName, iEntityType, vId, sLangCode, sDocumentType)
rem The default OutputFileName has the following pattern:
rem <Base folder from settings>\<subfolder from document type>\<id>\<Filename>
rem Example: C:\IsahDocuments\Emails\AR014\Customer_AR014_20160901_09-45.msg
rem With this script we will create two extra subfolders, based on the description of the entity type
rem and the language. The original path+filename will only be used for the filename part
rem In case you need to know who called this script, check the value of
rem global property ScriptContext.ScriptContextType which can be sctExternalDocuments or sctOutlookAddIn
dim sBaseFolder, sDocumentTypeFolder, sEntityFolder, sLanguageFolder, sIdFolder, sTrailingFileName
sBaseFolder = GetSQLValue("SELECT DocRootFolder FROM dbo.T_Setting WHERE SettingCode = 1")
sDocumentTypeFolder = GetSQLValue("SELECT SubFolder FROM dbo.T_DocumentType WHERE DocumentTypeCode = N'" & sDocumentType & "'")
sLanguageFolder = GetLanguageFolderName(sLangCode)
sEntityFolder = GetEntityDescription(iEntityType, sLangCode)
sIdFolder = GetIdFolder(iEntityType, vId)
sTrailingFileName = GetFileName(sOutputFileName)
if (TrailingFileName = "") then
TrailingFileName = "Document.txt"
end if
BeforeProcessFileName = AddPathDelimiter(sBaseFolder) & _
AddPathDelimiter(sDocumentTypeFolder) & _
AddPathDelimiter(SanitizeFolderName(sEntityFolder)) & _
AddPathDelimiter(SanitizeFolderName(sLanguageFolder)) & _
AddPathDelimiter(SanitizeFolderName(sIdFolder)) & _
SanitizeFolderName(sTrailingFileName)
end function
function GetSQLValue(sSQL)
rem Get first value from SQL query
dim oQry
set oQry = IsahObjects.Get("TIsahCDSQuery")
oQry.DatabaseName = "dbisahadmin"
oQry.SQL.Text = sSQL
oQry.Open
GetSQLValue = oQry.Field(0).Value
oQry.Close
set oQry = nothing
end function
function GetFileName(sFileName)
rem Strip path from file name
set oFso = CreateObject("Scripting.FileSystemObject")
GetFileName = oFso.GetFileName(sFileName)
set oFso = nothing
end function
function AddPathDelimiter(sPath)
rem Make sure path ends with backslash
AddPathDelimiter = Trim(sPath)
if AddPathDelimiter <> "" and (Right(AddPathDelimiter, 1) <> "\") then
AddPathDelimiter = AddPathDelimiter & "\"
end if
end function
function SanitizeFolderName(sFileName)
rem Replace invalid characters
const sInvalidChars = "/:*?<>|"""
dim i
SanitizeFolderName = Trim(sFileName)
for i = 1 to Len(sInvalidChars)
SanitizeFolderName = Replace(SanitizeFolderName, Mid(sInvalidChars, i, 1), "_")
Next
end function
function GetLanguageFolderName(sLangCode)
rem Translate language code into description
iLangId = GetSQLValue("SELECT LangID FROM T_Language WHERE LangCode = N'" & sLangCode & "'")
select case iLangId
case 1
GetLanguageFolderName ="Nederlands"
case 2
GetLanguageFolderName ="Deutsch"
case 5
GetLanguageFolderName ="English"
case 11
GetLanguageFolderName ="Français"
case else
GetLanguageFolderName ="Miscellaneous"
end select
end function
function GetIdFolder(iEntityType, vId)
rem Translate technical key value to functional key value, where appropriate
dim arrKeys
select case iEntityType
case etSalesOffer
GetIdFolder = GetSQLValue("SELECT QuotNr FROM T_DossierMain WHERE DossierCode = '" & vId & "'")
case etSalesOrder
GetIdFolder = GetSQLValue("SELECT OrdNr FROM T_DossierMain WHERE DossierCode = '" & vId & "'")
case etSalesLine
arrKeys = Split(vId, "_")
arrKeys(0) = GetSQLValue("SELECT OrdNr FROM T_DossierMain WHERE DossierCode = '" & arrKeys(0) & "'")
GetIdFolder = Join(arrKeys, "_")
case etPurchaseOffer
GetIdFolder = GetSQLValue("SELECT PurQuotNr FROM T_PurchaseDocument WHERE PurDocCode = " & vId)
case etPurchaseOrder
GetIdFolder = GetSQLValue("SELECT PurOrdNr FROM T_PurchaseDocument WHERE PurDocCode = " & vId)
case else
GetIdFolder = CStr(vId)
end select
end function
function GetIsahTableDescription(iIsahTableId, sLangCode)
rem Get description of IsahTable
GetIsahTableDescription = GetSQLValue("SELECT T.Description FROM T_IsahTableML AS T INNER JOIN T_Language AS L ON (L.LangID = T.LangID) WHERE T.IsahTableId = " & iIsahTableId & " AND L.LangCode = N'" & sLangCode & "'")
if IsNull(GetIsahTableDescription) then
GetIsahTableDescription = GetSQLValue("SELECT T.Description FROM T_IsahTableML AS T INNER JOIN T_Language AS L ON (L.LangID = T.LangID) WHERE T.IsahTableId = " & iIsahTableId & " AND L.LangCode = N'" & Application.GetSetting("BasicLangCode") & "'")
end if
if IsNull(GetIsahTableDescription) then
GetIsahTableDescription = GetSQLValue("SELECT T.Description FROM T_IsahTableML AS T INNER JOIN T_Language AS L ON (L.LangID = T.LangID) WHERE T.IsahTableId = " & iIsahTableId & " AND L.LangCode = N'EN'")
end if
if IsNull(GetIsahTableDescription) then
GetIsahTableDescription = ""
end if
end function
function GetEntityDescription(iEntityType, sLangCode)
rem Get description of entity
dim iIsahTableId
select case iEntitytype
case etCustomer
iIsahTableId = 9
case etSupplier
iIsahTableId = 10
case etEmployee
iIsahTableId = 13
case etPart
iIsahTableId = 12
case etSalesOffer
iIsahTableId = 2
case etSalesOrder
iIsahTableId = 2
case etPurchaseOrder
iIsahTableId = 8
case etProject
iIsahTableId = 83
case etProductionOrder
iIsahTableId = 3
case etObject
iIsahTableId = 11
case etMessage
iIsahTableId = 15
case etSalesContract
iIsahTableId = 278
case etPurchaseOffer
iIsahTableId = 8
case etPurchaseContract
iIsahTableId = 332
case etServiceMessage
iIsahTableId = 454
case etServiceContract
iIsahTableId = 55
case etAction
iIsahTableId = 16
case etShippingNote
iIsahTableId = 58
case etProcessedShippingNote
iIsahTableId = 58
case etSalesInvoice
iIsahTableId = 59
case etPurchaseInvoice
iIsahTableId = 64
case etLotNumber
iIsahTableId = 299
case etCertificate
iIsahTableId = 290
case etCustomerContact
iIsahTableId = 172
case etSupplierContact
iIsahTableId = 160
case etPurchaseLinePart
iIsahTableId = 69
case etPurchaseLineEquipment
iIsahTableId = 65
case etPurchaseLineExtOperation
iIsahTableId = 66
case etSalesLine
iIsahTableId = 1
case etServiceContractVersion
iIsahTableId = 56
case etPurchaseReminder
rem There is no Purchase reminder table in Isah, so we link it to the Supplier
iIsahTableId = 10
case etShippingNoteExtOperation
iIsahTableId = 360
case else
iIsahTableId = 0
end select
if (iIsahTableId > 0) then
GetEntityDescription = GetIsahTableDescription(iIsahTableId, sLangCode)
else
GetEntityDescription = ""
end if
end function
Elektronische communicatie
Script voor bepalen afzender-id
Als u gebruikmaakt van Ketenintegratie is het mogelijk om bij het importeren van elektronische berichten automatisch een script te starten dat de inhoud van het elektronische bericht aanpast. Omdat hij het importeren van een nieuw elektronisch bericht in Isah nog niet duidelijk is van welke afzender (klant of leverancier) het bericht afkomstig is, kan Isah op dit moment nog niet zoeken naar een klant- of leveranciersspecifiek script. In het veld Script voor bepalen van afzender-id geeft u een script op dat in het binnengekomen bericht de SCSN-code van de afzender van het bericht opzoekt. Hierna zal Isah bij de desbetreffende afzender in het veld Transformatiescript (te vinden op het tabblad Communicatie van de klant of leverancier) zoeken naar het script waarmee het bericht moet worden aangepast.
Is dit veld leeg, dan zal Isah bij het importeren van een elektronisch bericht geen script starten.
Voorbeeld opzet script
'Basisgegevens: Bepalen id van de afzender van een inkomend document
function GetSenderId(MessageType, FileName)
[script]
GetSenderId = [hier staat de SCSN-identificatie van de afzender]
end function