====== Sync Definition Files ====== Sync definition files, have a file suffix of .ttidef and can be edited using a plain text editor such as Notepad or vi. The purpose of a definition file is to provide the translations to TapeTrack on how to extract the required information from the source file, including location and format of the data. All TapeTrack command line programs, including Sync, will look for a definition file named default.ttidef in the directory they are executed in unless the name and location of the definition file is named in the program call. ===== Creating A Definition File ===== Using a text file editor create a file, using a descriptive name, with a suffix .ttidef (eg customer_ACME.ttidef). {{ttidef_file.png}} In Windows install, save this file to the TapeTrack\TapeTrack Sync\etc directory. You will also notice a sample ttidef file here that was created when Sync was installed. ===== Adding Definition Statements ===== The definition statements required vary on the format of the source file, what information is required for extraction and translations needed on the extracted data. ==== CSV Source File ==== sample CSV file: ''CSV_source.csv'' volume,barcode,family,type,location,pool 000000L6,000000L6,tape,LTO,Library,weekly_full,2021-07-21 000001L6,000001L6,tape,LTO,Offsite,weekly_full,2021-10-14 000002L6,000002L6,tape,LTO,Offsite,weekly_full,2021-07-21 000003L6,000003L6,tape,LTO,Offsite,weekly_full,2021-07-21 000004L6,000004L6,tape,LTO,Racking,weekly_full,2021-10-14 000005L6,000005L6,tape,LTO,Library,yearly_full,1970-01-01 000006L6,000006L6,tape,LTO,Racking,weekly_full,2021-07-21 000007L6,000007L6,tape,LTO,Racking,weekly_full,2021-10-14 CLN00012,CLN00012, CLN,LTO,,Cleaning_Tape, === Add File Type Directives === As we are using a comma delimitered CSV file we let the Sync engine know what the delimiter is. setCSVDelimiter(","); === Add Exclusion Directives === Skip any line starting with volume, as it is a heading and not a Volume Skip any Volume that starts with CLN. AddString(EXCLUSION, 0, "volume*"); AddExclusionOnValue(VOLUME, "CLN*"); ==== Setting Literal Values ==== Sync constants, such as Customer-ID and Media-ID, can be set using literal values as these values do not change. Set Scratch to true. setLiteral(CUSTOMER, "ACME"); setLiteral(MEDIA, "LTO"); setLiteral(SCRATCH, "True"); ==== Define Fields ==== Definition fields to pass date format to Sync engine, Y=YYYY (y-YY), m=mm, d=dd. Permanent date value sets the specified date to Permanent or no next move date. SetMoveDateFormat("%%Y/%%m/%%d"); SetPermanentDateValue("1971-01-01"); ==== Extract Data Fields ==== Extract Volume-ID from column 1, length 10 Remove spaces from Volume-ID in case it is less than 10 digits Extract(VOLUME, 1, 10, 0); RemoveSpaces(VOLUME); Extract Location from column 4, length 20 Remove spaces from location in case it is less than 20 digits Extract(REPOSITORY, 4, 20, 0); RemoveSpaces(REPOSITORY); Extract Description from column 5, length 30 Remove Spaces from Description in case it is less then 30 characters Extract(DESCRIPTION, 5, 30, 0); RemoveSpaces(DESCRIPTION); Extract Movedate from column 5, length 11 Extract(MOVEDATE, 5, 11, 0); ==== Translate Fields Directly ==== Translate Repository data to TapeTrack Repository-ID's Offsite = OFFS Library = LIBR Racking = RACK AddTranslation(REPOSITORY, "Offsite", "OFFS"); AddTranslation(REPOSITORY, "Library", "LIBR"); AddTranslation(REPOSITORY, "Racking", "RACK"); ==== Translate Fields Indirectly ==== Translate Scratch value, set to False if Volume location is Offsite AddTranslation2(SCRATCH, REPOSITORY, "OFFS", "False"); ==== Complete Definition File ==== setCSVDelimiter(","); setLiteral(CUSTOMER, "ACME"); setLiteral(MEDIA, "LTO"); setLiteral(SCRATCH, "True"); Extract(VOLUME, 1, 10, 0); RemoveSpaces(VOLUME); Extract(REPOSITORY, 4, 20, 0); RemoveSpaces(REPOSITORY); Extract(DESCRIPTION, 5, 30, 0); RemoveSpaces(DESCRIPTION); SetMoveDateFormat("%%Y/%%m/%%d"); Extract(MOVEDATE, 5, 11, 0); AddString(EXCLUSION, 0, "volume*"); AddExclusionOnValue(VOLUME, "CLN*"); AddTranslation(REPOSITORY, "Offsite", "OFFS"); AddTranslation(REPOSITORY, "Library", "LIBR"); AddTranslation(REPOSITORY, "Racking", "RACK"); AddTranslation2(SCRATCH, REPOSITORY, "OFFS", "False"); <- sync:fields| Sync Fields ^ sync:introduction|introduction ^ sync:execute|Run Sync ->