BarTender - how to do label printing from the cloud?


In Syteline V9 on-prem we have (or “used to have”) BarTender software, that communicates with the Label Printers. In Syteline, when users wanted to print labels, we use to insert data into a SQL Server Table, and BarTender was monitoring and reading data from this table. As soon as there is a new record in this table, BarTender will fetch it and send the label printing command to appropriate printer using the appropriate label template etc.


Now, we are in the process of migrating to multi-tenant cloud. So I would like to know the best approach to do this. If anyone have experience of going through this process, that would be great. Any Infor’s KB article on this will also be helpful. I have the following approach in my mind:


I will create a web-service on the on-prem BarTender server. This web-service will receive the data and insert it in the BarTender’s table (so that everything continue to work as is). Next, in CSI, I will create C# IDO Extension Class Library and through and IDO Method, I will call this web-service. My question is:


  1. Since our on-Prem BarTender server is behind a firewall (VPN), so, will need to white-list the IPs that will communicate to this web-service. Will it be possible for me to have the list of IP addresses of Infor’s multi-tenant cloud? How frequently will those IP addresses change? Is this a workable approach?
  2. Will my concept of calling webservice from IDO Extension Class work? Or should I look for some other complicated integration using ION (Infor OS) etc?


Thanks a lot.

  • ...consider also using flat files instead of table; this is how standard print package labels worked (and still works ok) will also need to determine which solution is faster, usually labels are immediately expected...

  • We do our label printing from the cloud with Bartender. It was fun to get working.

    Infor has a program called Mongoose Web Service. We have it running on a server here. It receives files from the cloud. On the Syteline side it gets defined on the File Server form. Then on the File Server Logical Folders form you can specify different folders to download files to. We also use it to download EFT files for finance, so I have a separate logical folder for each file type.

    In Syteline I have a form that collects the information for the label, creates a text file, and writes it out to the logical folder. I have Bartender set up to monitor the folder and once it detects a new file it processes it and prints the label.

  • We followed the same route at first but we were having unexpected behavior with the Mongoose Web Service application.

    We ended up going a different direction and having Bartender monitor a mailbox instead of file location. In Syteline we call an event which sends an email to the monitored mailbox with the same information which would be written in the flat file. Bartender then reads the email an prints out the label. It is about is about 5 seconds slower than monitoring a folder, but the code in Syteline is much easier to implement. 

  • We are utilizing Bartender with Factory Track in a multi-tenant cloud environment, leveraging the out-of-the-box functionalities i.e. using flat file. May I inquire whether you are printing labels from Factory Track or Syteline?

  • We are printing labels from Syteline.
    So, when you say "flat file", then is this flat file created on your local (on-prem) server? I guess this is some "File Server" functionality.

  • Thanks, I am trying to find out details of "Mongoose Web Service" program.

  • We maintain a local Bartender server—a virtual machine within our infrastructure—securely situated within our network’s firewall.

    Additionally, our network hosts a file server, also a virtual machine, dedicated to providing file systems for Syteline environments. For further details, please refer to the Syteline Form: FileServers.  Documentations available from Infor how to setup a file server in MT cloud environment.

    Regarding the Flat File, Infor supplies a standard template which we utilize during print operations from a Factory Track environment. We have incorporated several custom fields to meet our specific needs. A sample file has been generated has been added below.

     My rationale is that, upon the availability of the flat file on the File Server or Bartender Server, it is possible to configure the Bartender software to search for, retrieve these files and print the labels. This is an out of box configuration.

    Sample Flat File:

    %BTW% /AF="C:\Label_Print_Directory\Templates\item.btw" /PRN="LABEL-ZT411-001" /P /D="%Trigger File Name%" /C=1 /R=3
    LabelRequestIdString|LabelRequestId|LabelRequestSeqString|LabelRequestSeq|SiteString|Site|WhseString|Whse|LocString|Loc|ItemString|Item|DescriptionString|Description|QtyString|Qty|UMString|UM|RevisionString|Revision|LotString|Lot|SerNumString|SerNum|ProjectString|Project|OrderTypeString|OrderType|OrderNumberString|OrderNumber|OrderLineString|OrderLine|OrderReleaseString|OrderRelease|CustVendorString|CustVendor|CustVendorItemString|CustVendorItem|OrderUMString|OrderUM|Gs1CompanyCodeString|Gs1CompanyCode|SerialShippingContainerCodeString|SerialShippingContainerCode|GlobalTradeItemNumberString|GlobalTradeItemNumber|ReceiptNumString|ReceiptNum|ShipmentString|Shipment|ShipmentPkgString|ShipmentPkg|CarrierNameString|CarrierName|CarrierPkgString|CarrierPkg|ShipViaDescriptionString|ShipViaDescription|WeightString|Weight|ProductionLineString|ProductionLine|CrossdockLocationString|CrossdockLocation|CrossdockOrderString|CrossdockOrder|RefOrderTypeString|RefOrderType|RefOrderNumberString|RefOrderNum|RefOrderLineString|RefOrderLine|RefOrderReleaseString|RefOrderRelease|MfgDateString|MfgDate|ExpiryDateString|ExpiryDate|ContainerNumString|ContainerNum|NumberOfBoxesString|NumberOfBoxes|AltItemCodeString|AltItemCode|ItemTypeString|ItemType|DescriptionBString|DescriptionB|DescriptionCString|DescriptionC|DescriptionDString|DescriptionD|LocFromString|LocFrom|OperationString|Operation|QtyAdvisedString|QtyAdvised|RunNumberString|RunNumber|SearchKeyString|SearchKey|SequenceString|Sequence|SernString|Sern|DateString|Date|HuLevelString|HuLevel|MultiItemHuString|MultiItemHu|ParentHuString|ParentHu|QtyStorageUnitString|QtyStorageUnit|ReceiptLineString|ReceiptLine|SerialPresentString|SerialPresent|ShipmentLineString|ShipmentLine|StatusString|Status|FixedLocString|FixedLoc|HeightString|Height|InvDateString|InvDate|InspectionFlagString|InspectionFlag|LengthUnitString|LengthUnit|LotCertString|LotCert|RecommendedLocString|RecommendedLoc|SupplierLotString|SupplierLot|WidthString|Width|DepthString|Depth|WeightUnitString|WeightUnit|WorkCenString|WorkCen|ActivityDescString|ActivityDesc|CostCompDescString|CostCompDesc|ProjectDescString|ProjectDesc|ElementDescString|ElementDesc|ExtensionDescString|ExtensionDesc|FromActivityString|FromActivity|CostComponentString|CostComponent|ElementString|Element|ExtensionString|Extension|ReceiptDateString|ReceiptDate|KanbanIdString|KanbanId|KanbanLocString|KanbanLoc|ReplenishWhseString|ReplenishWhse|QtyOpenString|QtyOpen|DayString|Day|MonthString|Month|YearString|Year|Add1String|Add1|Add2String|Add2|CustVendNameString|CustVendName|UserNameString|UserName|LabelName|NumCopies|PrinterName|RefRequestId|Userid|LabelPrintSoftware|FileName|QuietPrint|TaskTypeString|TaskType|TaskCodeString|TaskCode|TaskDescriptionString|TaskDescription|EmployeeNumberString|EmployeeNumber|FirstNameString|FirstName|LastNameString|LastName|BadgeNumberString|BadgeNumber|ReasonCodeString|ReasonCode|ReasonCodeDescriptionString|ReasonCodeDescription|QCSReceiverNumString|QCSReceiverNum|CountryOriginString|CountryOrigin|CountryOriginNameString|CountryOriginName|NoOfLabelsPerUnit|NoOfLabelsPerUnit Data|LabelSequence|LabelSequence Data|CustomerGroupCode|CustomerGroupCode Data|
    Label Request Id|88638|Label Request Seq|1|Site|NW_OH|Whse|MAIN|Location|STOCK|Item|SG-CR-DK|Description|FOR DUKE COUNTER - 193995 - Custom Sneez|Qty|1.00000000|UM|EA|Revision| |Lot| |Serial Number| |Project| |Order Type|P|Order Number|OP00010685|Order Line|1|Order Release|0|Cust Vendor|BSI0110|Cust Vendor Item| |Order UM| |Gs1 Company Code| |Serial Shipping Container Code| |Global Trade Item Number| |Receipt Num| |Shipment| |Shipment Pkg| |Carrier Name| |Carrier Pkg| |Ship Via Description| |Weight|1.00000000|Production Line| |Cross dock Location| |Cross dock Order| |Ref Order Type|O|Ref Order Num|CHIDF00024|Ref Order Line|0|Ref Order Release|2|Mfg Date| |Expiry Date| |Container Num| |Number of Boxes|1.00000000|Alternate Item| |Item Type| |Description B| |Description C| |Description D| |Location From| |Operation| |Qty Advised| |Run Number| |Search Key| |Sequence| |Advice| |Date| |HU Level| |Multi-Item HU| |Parent HU| |Qty Storage U/M| |Receipt Line| |Serial Present| |Shipment Line| |Status| |Fixed Location| |Height| |Inv Date| |Inspection Flag| |Length U/M| |Lot Certification| |Recommended Loc| |Supplier Lot| |Width| |Depth| |Weight U/M| |Work Center| |Activity Description| |Cost Component Description| |Project Description| |Element Description| |Extension Description| |From Activity| |Cost Component| |Element| |Extension| |Receipt Date|20240423 00:00:00.000|Kanban ID| |Kanban Location| |Replenish Warehouse| |Qty Open| |Day| |Month| |Year| |Address (1)| |Address (2)| |Customer/Vendor Name|BSI LLC|User Name||item.btw|1|LABEL-ZT411-001| |257|1|PoReceipt.dd|0|Task Type| |Task Code| |Task Description| |Employee Number| |First Name| |Last Name| | | |Reason Code| |Reason Code Description| |QCS Receiver Num| |Country of Origin| |Country of Origin Name| |NoOfLabelsPerUnit|1|LabelSequence|0101|CustomerGroupCode|TAM|

  • Perfect. Now I have a good idea of how to achieve it. Thanks a lot.

  • We are on the cloud.  We use an Amazon S3 bucket for this.    You can setup a Syteline Server that is attached to the S3 Bucket.    Then Bartender also has the ability to monitor the bucket waiting for flat files.    We did this to avoid having an open port on our server using FTP or something else.     But I would like to know more about the Mongoose Web Service Application.   Where can I find that?