Unlocking SAP Table Data: Streamlined Extraction via the RFC Connector
Workato/4SAP

Unlocking SAP Table Data: Streamlined Extraction via the RFC Connector

In the ever-evolving landscape of enterprise automation, integrating with SAP often stands out as a formidable challenge. Whether you're extracting materials, invoices, or master data, the process can feel rigid and complex. But what if you could streamline SAP data access into a reusable, low-code service layer?

Enter Workato's SAP RFC Connector + SAP—a powerful combo that enables flexible, scalable data extraction from any transparent table in SAP. This blog walks you through using this RFC connector to build a generic SAP table data reader integration with Workato.


❓Why do we need to extract data directly from SAP tables?

It's particularly useful when no APIs (BAPI/RFM/IDoc/OData) are available to read master or transactional data.

Some of the business use cases are:

  • Manufacturing & Supply Chain - Inventory Visibility, Material Master Sync, Procurement Reports
  • Sales & Distribution - Customer Master Sync, Sales Order Reporting
  • Finance & Controlling - GL Account Extract, Cost Center Reporting, Asset Master Export, AP/AR Aging Reports
  • Mass master-transactional data replication scenarios


🧠 How does Workato solve the problem and make integrations easy?

Our SAP-certified SAP RFC connector is capable of making complex integrations much easier.

Article content
SAP Certified connector

  • In the Workato recipe, navigate to the "Call remote function module" action in the SAP RFC connector.

Article content
Call remote function module action
RFC_READ_TABLE is a remote-enabled SAP function module that allows external applications to:Query any transparent table by name, Apply dynamic WHERE conditions, Limit fields and row counts. This makes it perfect for generic, reusable integrations—especially with iPaaS platforms like Workato. It provides direct and efficient access to SAP table data without requiring complex development. This function module simplifies integration by offering a straightforward interface for data retrieval, making it versatile for various use cases.

  • Set the RFM name to "RFC_READ_TABLE" and enter the following values for the optional fields.


  1. DELIMITER = | (taken as an example)
  2. QUERY_TABLE = MARA (taken as an example)
  3. USE_ET_DATA_4_RETURN = X (refer to the known limitations section - Approach 1)
  4. FIELDNAME - Only if you wish to filter results by specific fields, refer to the next step for guidance on this parameter (refer to the known limitations section - Approach 2)

Article content
Entering the RFM name

  • Switch the input mode to a Fixed list and click on "Add item". (this is important for adding multiple fields as a manual input)

Article content
Example with Values
Manually type or Copy/Paste field names as needed, taking the reference from the dynamic schema generated under "Table fields", add more items as needed. The good thing here is that you do not need to rely on your SAP GUI access, or the SAP team to get the list of table fields along with their description and data type. 😍
Article content
SAP Table field selection
It's important to investigate the SAP table structure to decide which fields are relevant to your use case. 🔍 
Article content
Example: Material and Material Group

Sample JSON response output once this is executed:

{
	"RFM name": "RFC_READ_TABLE",
	"Status": "Success",
	"Response data": {
		"ET_DATA": [
			{
				"LINE": "000000000000000024|01"
			},
			{
				"LINE": "000000000000000025|01"
			},
			{
				"LINE": "000000000000000026|01"
			}
		],
		"DATA": [],
		"FIELDS": [
			{
				"FIELDNAME": "MATNR",
				"OFFSET": "000000",
				"LENGTH": "000040",
				"TYPE": "C",
				"FIELDTEXT": "Material Number"
			},
			{
				"FIELDNAME": "MATKL",
				"OFFSET": "000041",
				"LENGTH": "000009",
				"TYPE": "C",
				"FIELDTEXT": "Material Group"
			}
		],
		"OPTIONS": []
	},
	"Table Fields": {
		"/BEV1/LULDEGRP": "/BEV1/LULDEGRP",
		"/BEV1/LULEINH": "/BEV1/LULEINH",
		"/BEV1/NESTRUCCAT": "/BEV1/NESTRUCCAT",
		"/CWM/TARA": "/CWM/TARA",
		"/CWM/TARUM": "/CWM/TARUM",
		"/CWM/TOLGR": "/CWM/TOLGR",
		"/CWM/VALUM": "/CWM/VALUM",
		"/CWM/XCWMAT": "/CWM/XCWMAT",
		"/DSD/SL_TOLTYP": "/DSD/SL_TOLTYP",
		"/DSD/SV_CNT_GRP": "/DSD/SV_CNT_GRP",
		"/DSD/VC_GROUP": "/DSD/VC_GROUP",
		"/SAPMP/ABMEIN": "/SAPMP/ABMEIN",
		"/SAPMP/AHO": "/SAPMP/AHO",
		"/SAPMP/BRAD": "/SAPMP/BRAD",
		"/SAPMP/FBAK": "/SAPMP/FBAK",
		"/SAPMP/FBDK": "/SAPMP/FBDK",
		"/SAPMP/FBHK": "/SAPMP/FBHK",
		"/SAPMP/KADP": "/SAPMP/KADP",
		"/SAPMP/KADU": "/SAPMP/KADU",
		"/SAPMP/KEDU": "/SAPMP/KEDU",
		"/SAPMP/MIFRR": "/SAPMP/MIFRR",
		"/SAPMP/RILI": "/SAPMP/RILI",
		"/SAPMP/SPBI": "/SAPMP/SPBI",
		"/SAPMP/SPTR": "/SAPMP/SPTR",
		"/SAPMP/TRAD": "/SAPMP/TRAD",
		"/STTPEC/COUNTRY_REF": "/STTPEC/COUNTRY_REF",
		"/STTPEC/PRDCAT": "/STTPEC/PRDCAT",
		"/STTPEC/SERTYPE": "/STTPEC/SERTYPE",
		"/STTPEC/SYNCACT": "/STTPEC/SYNCACT",
		"/STTPEC/SYNCCHG": "/STTPEC/SYNCCHG",
		"/STTPEC/SYNCTIME": "/STTPEC/SYNCTIME",
		"/VSO/R_BOT_IND": "/VSO/R_BOT_IND",
		"/VSO/R_KZGVH_IND": "/VSO/R_KZGVH_IND",
		"/VSO/R_NO_P_GVH": "/VSO/R_NO_P_GVH",
		"/VSO/R_PAL_B_HT": "/VSO/R_PAL_B_HT",
		"/VSO/R_PAL_IND": "/VSO/R_PAL_IND",
		"/VSO/R_PAL_MIN_H": "/VSO/R_PAL_MIN_H",
		"/VSO/R_PAL_OVR_D": "/VSO/R_PAL_OVR_D",
		"/VSO/R_PAL_OVR_W": "/VSO/R_PAL_OVR_W",
		"/VSO/R_QUAN_UNIT": "/VSO/R_QUAN_UNIT",
		"/VSO/R_STACK_IND": "/VSO/R_STACK_IND",
		"/VSO/R_STACK_NO": "/VSO/R_STACK_NO",
		"/VSO/R_TILT_IND": "/VSO/R_TILT_IND",
		"/VSO/R_TOL_B_HT": "/VSO/R_TOL_B_HT",
		"/VSO/R_TOP_IND": "/VSO/R_TOP_IND",
		"ADPROF": "ADPROF",
		"ADSPC_SPC": "ADSPC_SPC",
		"AEKLK": "AEKLK",
		"AENAM": "AENAM",
		"AESZN": "AESZN",
		"ALLOW_PMAT_IGNO": "ALLOW_PMAT_IGNO",
		"ANIMAL_ORIGIN": "ANIMAL_ORIGIN",
		"ANP": "ANP",
		"ATTYP": "ATTYP",
		"BBTYP": "BBTYP",
		"BEGRU": "BEGRU",
		"BEHVO": "BEHVO",
		"BFLME": "BFLME",
		"BISMT": "BISMT",
		"BLANZ": "BLANZ",
		"BLATT": "BLATT",
		"BMATN": "BMATN",
		"BRAND_ID": "BRAND_ID",
		"BREIT": "BREIT",
		"BRGEW": "BRGEW",
		"BRIDGE_MAX_SLOPE": "BRIDGE_MAX_SLOPE",
		"BRIDGE_TRESH": "BRIDGE_TRESH",
		"BSTAT": "BSTAT",
		"BSTME": "BSTME",
		"BWSCL": "BWSCL",
		"BWVOR": "BWVOR",
		"CADKZ": "CADKZ",
		"CARE_CODE": "CARE_CODE",
		"CHML_CMPLNC_RLVNCE_IND": "CHML_CMPLNC_RLVNCE_IND",
		"CMETH": "CMETH",
		"CMREL": "CMREL",
		"COLOR": "COLOR",
		"COLOR_ATINN": "COLOR_ATINN",
		"COMMODITY": "COMMODITY",
		"COMPL": "COMPL",
		"CREATED_AT_TIME": "CREATED_AT_TIME",
		"CUOBF": "CUOBF",
		"CWQPROC": "CWQPROC",
		"CWQREL": "CWQREL",
		"CWQTOLGR": "CWQTOLGR",
		"DATAB": "DATAB",
		"DFS_MFRP2": "DFS_MFRP2",
		"DFS_SENSITIVITY_KEY": "DFS_SENSITIVITY_KEY",
		"DG_PACK_STATUS": "DG_PACK_STATUS",
		"DISST": "DISST",
		"DPCBT": "DPCBT",
		"DUMMY_PRD_INCL_EEW_PS": "DUMMY_PRD_INCL_EEW_PS",
		"EAN11": "EAN11",
		"EANNR": "EANNR",
		"EKWSL": "EKWSL",
		"ENTAR": "ENTAR",
		"ERGEI": "ERGEI",
		"ERGEW": "ERGEW",
		"ERNAM": "ERNAM",
		"ERSDA": "ERSDA",
		"ERVOE": "ERVOE",
		"ERVOL": "ERVOL",
		"ETIAG": "ETIAG",
		"ETIAR": "ETIAR",
		"ETIFO": "ETIFO",
		"EXTWG": "EXTWG",
		"FASHGRD": "FASHGRD",
		"FERTH": "FERTH",
		"FIBER_CODE1": "FIBER_CODE1",
		"FIBER_CODE2": "FIBER_CODE2",
		"FIBER_CODE3": "FIBER_CODE3",
		"FIBER_CODE4": "FIBER_CODE4",
		"FIBER_CODE5": "FIBER_CODE5",
		"FIBER_PART1": "FIBER_PART1",
		"FIBER_PART2": "FIBER_PART2",
		"FIBER_PART3": "FIBER_PART3",
		"FIBER_PART4": "FIBER_PART4",
		"FIBER_PART5": "FIBER_PART5",
		"FLAGCLASS": "FLAGCLASS",
		"FORMT": "FORMT",
		"FREE_CHAR": "FREE_CHAR",
		"FSH_MG_AT1": "FSH_MG_AT1",
		"FSH_MG_AT2": "FSH_MG_AT2",
		"FSH_MG_AT3": "FSH_MG_AT3",
		"FSH_SC_MID": "FSH_SC_MID",
		"FSH_SEAIM": "FSH_SEAIM",
		"FSH_SEALV": "FSH_SEALV",
		"FUELG": "FUELG",
		"GDS_RELEVANT": "GDS_RELEVANT",
		"GENNR": "GENNR",
		"GEWEI": "GEWEI",
		"GEWTO": "GEWTO",
		"GROES": "GROES",
		"GTIN_VARIANT": "GTIN_VARIANT",
		"HAZMAT": "HAZMAT",
		"HEIGHT_NONFLAT": "HEIGHT_NONFLAT",
		"HEIGHT_NONFLAT_UOM": "HEIGHT_NONFLAT_UOM",
		"HERKL": "HERKL",
		"HNDLCODE": "HNDLCODE",
		"HOEHE": "HOEHE",
		"HUTYP": "HUTYP",
		"HUTYP_DFLT": "HUTYP_DFLT",
		"ICFA": "ICFA",
		"IDENTIFICATION_TAG_TYPE": "IDENTIFICATION_TAG_TYPE",
		"IHIVI": "IHIVI",
		"ILOOS": "ILOOS",
		"IMATN": "IMATN",
		"INHAL": "INHAL",
		"INHBR": "INHBR",
		"INHME": "INHME",
		"INV_PLN_MODE": "INV_PLN_MODE",
		"IPMIPPRODUCT": "IPMIPPRODUCT",
		"IPRKZ": "IPRKZ",
		"KOSCH": "KOSCH",
		"KUNNR": "KUNNR",
		"KZEFF": "KZEFF",
		"KZGVH": "KZGVH",
		"KZKFG": "KZKFG",
		"KZKUP": "KZKUP",
		"KZNFM": "KZNFM",
		"KZREV": "KZREV",
		"KZUMW": "KZUMW",
		"KZWSM": "KZWSM",
		"LABOR": "LABOR",
		"LAEDA": "LAEDA",
		"LAENG": "LAENG",
		"LAST_CHANGED_TIME": "LAST_CHANGED_TIME",
		"LIQDT": "LIQDT",
		"LOGISTICAL_MAT_CATEGORY": "LOGISTICAL_MAT_CATEGORY",
		"LOGLEV_RETO": "LOGLEV_RETO",
		"LOGUNIT": "LOGUNIT",
		"LVORM": "LVORM",
		"MAGRV": "MAGRV",
		"MANDT": "MANDT",
		"MATFI": "MATFI",
		"MATKL": "MATKL",
		"MATNR": "MATNR",
		"MATNR_EXTERNAL": "MATNR_EXTERNAL",
		"MAXB": "MAXB",
		"MAXC": "MAXC",
		"MAXC_TOL": "MAXC_TOL",
		"MAXDIM_UOM": "MAXDIM_UOM",
		"MAXH": "MAXH",
		"MAXL": "MAXL",
		"MBRSH": "MBRSH",
		"MCOND": "MCOND",
		"MEABM": "MEABM",
		"MEDIUM": "MEDIUM",
		"MEINS": "MEINS",
		"MFRGR": "MFRGR",
		"MFRNR": "MFRNR",
		"MFRPN": "MFRPN",
		"MHDHB": "MHDHB",
		"MHDLP": "MHDLP",
		"MHDRZ": "MHDRZ",
		"MLGUT": "MLGUT",
		"MO_PROFILE_ID": "MO_PROFILE_ID",
		"MPROF": "MPROF",
		"MSBOOKPARTNO": "MSBOOKPARTNO",
		"MSTAE": "MSTAE",
		"MSTAV": "MSTAV",
		"MSTDE": "MSTDE",
		"MSTDV": "MSTDV",
		"MTART": "MTART",
		"MTPOS_MARA": "MTPOS_MARA",
		"NEWPROD_INDI": "NEWPROD_INDI",
		"NORMT": "NORMT",
		"NRFHG": "NRFHG",
		"NSNID": "NSNID",
		"NTGEW": "NTGEW",
		"NUMTP": "NUMTP",
		"OVERHANG_TRESH": "OVERHANG_TRESH",
		"OVLPN": "OVLPN",
		"PACKCODE": "PACKCODE",
		"PICNUM": "PICNUM",
		"PILFERABLE": "PILFERABLE",
		"PLGTP": "PLGTP",
		"PMATA": "PMATA",
		"PRDHA": "PRDHA",
		"PRD_ENDDT": "PRD_ENDDT",
		"PRD_STARTDT": "PRD_STARTDT",
		"PRODUCTOID": "PRODUCTOID",
		"PROD_SHAPE": "PROD_SHAPE",
		"PROFL": "PROFL",
		"PRZUS": "PRZUS",
		"PSM_CODE": "PSM_CODE",
		"PSTAT": "PSTAT",
		"PS_SMARTFORM": "PS_SMARTFORM",
		"QGRP": "QGRP",
		"QMPUR": "QMPUR",
		"QQTIME": "QQTIME",
		"QQTIMEUOM": "QQTIMEUOM",
		"RAUBE": "RAUBE",
		"RBNRM": "RBNRM",
		"RDMHD": "RDMHD",
		"RETDELC": "RETDELC",
		"RIC_ID": "RIC_ID",
		"RMATP": "RMATP",
		"RMATP_PB": "RMATP_PB",
		"SAISJ": "SAISJ",
		"SAISO": "SAISO",
		"SAITY": "SAITY",
		"SALES_MATERIAL": "SALES_MATERIAL",
		"SATNR": "SATNR",
		"SCM_BOD_DEPLVL": "SCM_BOD_DEPLVL",
		"SCM_DRP_GL_STOCK": "SCM_DRP_GL_STOCK",
		"SCM_EXCL_EXPEDITE": "SCM_EXCL_EXPEDITE",
		"SCM_KITCOMP": "SCM_KITCOMP",
		"SCM_MATID_GUID16": "SCM_MATID_GUID16",
		"SCM_MATID_GUID22": "SCM_MATID_GUID22",
		"SCM_MATURITY_DUR": "SCM_MATURITY_DUR",
		"SCM_PROD_PAOOPT": "SCM_PROD_PAOOPT",
		"SCM_PUOM": "SCM_PUOM",
		"SCM_RESTRICT_INVBAL": "SCM_RESTRICT_INVBAL",
		"SCM_SHLF_LFE_REQ_MAX": "SCM_SHLF_LFE_REQ_MAX",
		"SCM_SHLF_LFE_REQ_MIN": "SCM_SHLF_LFE_REQ_MIN",
		"SDM_VERSION": "SDM_VERSION",
		"SERIAL": "SERIAL",
		"SERLV": "SERLV",
		"SGT_COVSA": "SGT_COVSA",
		"SGT_CSGR": "SGT_CSGR",
		"SGT_REL": "SGT_REL",
		"SGT_SCOPE": "SGT_SCOPE",
		"SGT_STAT": "SGT_STAT",
		"SIZE1": "SIZE1",
		"SIZE1_ATINN": "SIZE1_ATINN",
		"SIZE2": "SIZE2",
		"SIZE2_ATINN": "SIZE2_ATINN",
		"SLED_BBD": "SLED_BBD",
		"SOM_CTR_AUTORENEWAL": "SOM_CTR_AUTORENEWAL",
		"SOM_CYCLE": "SOM_CYCLE",
		"SOM_CYCLE_RULE": "SOM_CYCLE_RULE",
		"SOM_TC_SCHEMA": "SOM_TC_SCHEMA",
		"SPART": "SPART",
		"SPROF": "SPROF",
		"SRV_DURA": "SRV_DURA",
		"SRV_DURA_UOM": "SRV_DURA_UOM",
		"SRV_ESCAL": "SRV_ESCAL",
		"SRV_SERWI": "SRV_SERWI",
		"STFAK": "STFAK",
		"STOFF": "STOFF",
		"TAKLV": "TAKLV",
		"TARE_VAR": "TARE_VAR",
		"TEMPB": "TEMPB",
		"TEXTILE_COMP_IND": "TEXTILE_COMP_IND",
		"TOLERANCE_TYPE": "TOLERANCE_TYPE",
		"TRAGR": "TRAGR",
		"VABME": "VABME",
		"VARID": "VARID",
		"VHART": "VHART",
		"VOLEH": "VOLEH",
		"VOLTO": "VOLTO",
		"VOLUM": "VOLUM",
		"VPREH": "VPREH",
		"VPSTA": "VPSTA",
		"WEORA": "WEORA",
		"WESCH": "WESCH",
		"WHMATGR": "WHMATGR",
		"WHSTC": "WHSTC",
		"WRKST": "WRKST",
		"XCHPF": "XCHPF",
		"XGCHP": "XGCHP",
		"XGRDT": "XGRDT",
		"ZEIAR": "ZEIAR",
		"ZEIFO": "ZEIFO",
		"ZEINR": "ZEINR",
		"ZEIVR": "ZEIVR",
		"ZFIELD1": "ZFIELD1",
		"ZZ1_CUSTOMFIELDHIGHRIS_PRD": "ZZ1_CUSTOMFIELDHIGHRIS_PRD",
		"ZZ1_CUSTOMFIELDRISKMIT_PRD": "ZZ1_CUSTOMFIELDRISKMIT_PRD",
		"ZZ1_CUSTOMFIELDRISKREA_PRD": "ZZ1_CUSTOMFIELDRISKREA_PRD"
	}
}        
Article content
Sample output

⚠️ Known Limitations

⭐ While SAP officially discourages the use of the RFC_READ_TABLE function module due to its technical limitations, authorization concerns, and lack of public release (as outlined in SAP Note 382318 - FAQ | Function module RFC_READ_TABLE), the reality across the integration landscape tells a different story. Despite SAP's guidance to avoid it in favor of business-context-specific APIs or custom-developed RFCs, RFC_READ_TABLE remains one of the most widely used tools for reading data from SAP tables in external solutions. Here’s why:

  • Lack of standardized APIs - SAP solutions do not provide OOTB (out-of-the-box) APIs like BAPI/RFC/IDOC/OData to extract tabular data directly.
  • Versatility and simplicity - With a single function module, integrators can query almost any transparent table—making it extremely appealing for generic extraction use cases, prototyping, or bridging API gaps.
  • Adoption by major platforms - Many IPaaS, ETL, and data integration tools support or build connectors around this module, recognizing its practicality in the absence of a better universal solution.

That said, caution is essential. RFC_READ_TABLE should be used with strict access control as mentioned in SAP Note 382318.

Article content
Access Control

⭐ Instead of the 512-character limited result table "DATA", you can use the unlimited exporting parameter table "ET_DATA". (use the flag USE_ET_DATA_4_RETURN)

  1. Approach 1: Utilize and maintain the "X" value for the flag USE_ET_DATA_4_RETURN. If this flag is not available in SAP, implement the relevant SAP notes in the SAP system to enhance the RFC_READ_TABLE functionality (SAP Note 2246160 - Enhancement RFC_READ_TABLE (7.40+), and SAP Note 3291780 - Enhancement RFC_READ_TABLE (7.31)). The output table parameter DATA has a maximum output length of 512 characters; with this flag, the data will be exported to the new export parameter ET_DATA where there is no such limitation for extraction.
  2. Approach 2: Filter your results to extract only specific fields into the output table DATA, as extracting all fields will lead to a DATA_BUFFER_EXCEEDED error due to this RFM's limitation.

⭐ The TEXT field under OPTION schema holds the query condition. There is a 75-character limit to the length of the query, so if the query exceeds that limit, add more items and split the query into new lines.

Article content
TEXT field limation - split the query

🤔✨ What more can you do?

  • Apply dynamic WHERE conditions, by adding "TEXT" visible under OPTIONS schema.

Article content
Filtered Query
Article content
Filter query with "IN" clause

  • The timeout can be extended to run this call asynchronously if the execution time is more than 90 seconds.

Article content
Timeout

  • Leverage the Workato Data tables to configure the behavior of RFC_READ_TABLE calls depending on the use case. For example, all parameters like query table name, delimiter character, max rows, field names, etc., and last but not least, even OPTIONS text could be stored in the Workato Data tables.
  • Use a generic Recipe Function with the use case ID as an input parameter to read RFC_READ_TABLE call parameters dynamically from the lookup and reuse the same recipe function for different RFC read table calls.
  • And, of course, a lot more!

When selecting a large volume of data, please keep the following points in mind:

  • The ROWSKIPS parameter should only be used for packaged data selections, starting with the second package. It cannot be used in standalone queries.
  • When using ROWSKIPS, it is mandatory to also set the GET_SORTED parameter to 'X'.
  • Additionally, the ROWCOUNT parameter must be provided alongside ROWSKIPS, following the rule: ROWSKIPS MOD ROWCOUNT = 0 and ROWCOUNT ≠ 0.
  • Packaged data selection is a workaround and may reduce performance if the package size is too small. For optimal performance, use a package size between 500,000 and 1 million records.
  • To determine the appropriate package size, you can first call RFC_READ_TABLE with your desired selection criteria and set the NO_DATA parameter to 'C'. The ET_DATA output will return the count of matching records.


🚀 Conclusion

Using RFC_READ_TABLE as a generic SAP reader in Workato allows teams to decentralize data access while keeping SAP logic centralized. With the right field-level controls and transformation logic, this approach can become your Swiss army knife for SAP data automation.

Are you tired of seeing legacy UI screens for SAP GUI and traditional IPaaS solutions do all the jobs? Switch to Workato ! 🔄

Explore our page: Workato/4SAP and SAP RFC connector documentation



Kunal Kulkarni

Senior Manager | Practice Lead @ Bristlecone | Technical Presales, Delivery Management

2mo

Thanks for sharing, Sidhant ! This is excellent! Keep it going 😊

Amit Agrawal

Associate Director at Bristlecone

2mo

Great insights, very well explained Sidhant Mahajan!

Martijn Koevoets

Maakt van IT weer een groeiversneller voor MKB's | Workato Silver Partner

2mo

Thanks for sharing. Always good to see hands-on examples like this. RFC_READ_TABLE can be useful for prototyping, but tends to fall short in production due to limitations around structure, scalability, and access control. For the use cases you mentioned, standard SAP APIs like BAPIs, OData, or CDS Views are available and often offer a more robust and future-proof approach. Curious to hear how this worked out in your case.

To view or add a comment, sign in

Others also viewed

Explore topics