3 Ways Technology can Transform Your Company into a Sustainable Business

As the digital age continues to change the way we do business, companies must adapt to rapidly changing times by implementing a way to transform traditional businesses into resilient and financially viable companies.

One way global organizations are trying to achieve longevity and financial viability, no matter what industry they belong to, is by switching to more sustainable practices and processes. This means adopting a business model that reduces environmental impact and boosts operational efficiency, ultimately raising profit and improving the business’s bottom line.

The Role of Technology in Creating a Sustainable Business

Technology plays a vital role in making any type of business sustainable. Whether you’re a retail company, manufacturing company, or even a food company, technology opens doors to innovations that could make the transition to sustainability more feasible. Here are three ways technology can transform your business into an environmentally friendly, operationally efficient and highly profitable company:

1. Use Smart Tech to Cut Down Expenses

Smart technology such as smart lighting, climate control, and power use can help companies lessen their environmental impact while reducing electric consumption. These smart innovations often rely on sensors to determine whether or not space is being used. It can also be controlled remotely, using an app that can be accessed via any gadget.

Moreover, a smart office becomes smarter and more efficient over time, especially as you introduce and connect it to other devices. These types of energy-saving devices ensure that no energy is wasted and that all electronic devices are used optimally.

2. Outsource Your Operations to Streamline Costs and Workload

Although outsourcing also entails the participation of professionals, various software and business intelligence platforms also make it possible to streamline work that’s otherwise expensive when managed or implemented in-house.

By outsourcing some non-core business operations, companies may earn huge savings by cutting down on rentals, overhead costs, payroll and other operational expenses. It is also a practical way to ensure that services are delivered efficiently, using a cost-effective way.

In addition, apart from the common outsourcing services we are familiar with, it is also possible to outsource processes that involve document management and knowledge processing. An example of this is a company called Net Lawman. The company provides access to an online library of high-quality legal document templates and legal information articles that businesses can edit and use, instead of hiring an actual professional, which can turn out to be more expensive.

Outsourcing companies that provide similar services to that of Net Lawman, takes away the legwork from businesses, giving them more time to focus on their core offerings.

3. Invest in Cloud Computing

Cloud computing has been on a steady rise since the concept was introduced by Larry Ellison and his colleagues in the 1990s. As of 2016, the private cloud adoption rate is at 77 percent, while enterprise adoption is at 31 percent, and for a number of good reasons.

Cloud services minimize the use of physical space, as well as other resources that can be a source of both environmental emissions and unnecessary operational costs. Even a study commissioned by Microsoft shows that the IT sector alone can reduce its greenhouse gas emissions to 4.5 megatons if 80 percent of global enterprises powered down their local servers and switched to cloud computing.

Pushing businesses towards a more sustainable direction holds many benefits especially in terms of customer satisfaction, overall operations, environmental impact, and business performance. In addition, although some suggestions may require investing in expensive software or having to pay a fee for various services, it will still be more affordable compared to regularly spending for in-house support and maintenance.

Furthermore, switching to sustainability doesn’t always require purchasing software or technology. Every single person in a company can contribute and practice sustainability in their own little way. It could be by bringing a reusable cup to work or cutting down on paper waste; we all have the capacity to become better employees and business people by choosing to practice a sustainable way of life. http://bit.ly/2jRP4Io #SAP #SAPCloud #AI

Tip: How To Get SAP GUI Scripting Profile Parameters with PowerShell and NCo

Often it is necessary to set the SAP GUI Scripting parameters with transaction code RZ11 in an SAP system. In this post I will present an example how to get and set this parameters via a PowerShell script and NCo.

In the first step the script gets the attributes from sapgui/user_script% from table TPFYPROPTY. Then it looks whether the attribute can be changed. If it is possible it gets via RFM PFL_GET_PARAMETER_INFO the user and the default value. Then it compares this values with the necessary standard and if they are different it changes the value.

If I use the RFM TH_CHANGE_PARAMETER via NCo, it delivers always the error NOT_IN_SAME_SYSTEM. So I programmed a wrapper Z_TH_CHANGE_PARAMETER which adds DESTINATION ‘NONE’ to the call. #-Begin—————————————————————– #-Loads SAP dotNET Connector Libraries———————————- Function Load-NCo { [String]$ScriptDir = $PSScriptRoot If ([Environment]::Is64BitProcess) { [String]$Path = $ScriptDir + “x64″ } Else { [String]$Path = $ScriptDir + ”x86″ } [String]$File = $Path + “sapnco.dll”; Add-Type -Path $File $File = $Path + “sapnco_utils.dll”; Add-Type -Path $File } #-Delivers SAP Destination———————————————- Function Get-Destination { $cfgParams = New-Object SAP.Middleware.Connector.RfcConfigParameters $cfgParams.Add($cfgParams::Name, “TEST”) $cfgParams.Add($cfgParams::AppServerHost, “ABAP702”) $cfgParams.Add($cfgParams::SystemNumber, “00”) $cfgParams.Add($cfgParams::Client, “001”) $cfgParams.Add($cfgParams::User, “BCUSER”) $SecPasswd = Read-Host -Prompt “Passwort” -AsSecureString $ptrPasswd = ` [Runtime.InteropServices.Marshal]::SecureStringToBStr($SecPasswd) $Passwd = ` [Runtime.InteropServices.Marshal]::PtrToStringBStr($ptrPasswd) $cfgParams.Add($cfgParams::Password, $Passwd) Return [SAP.Middleware.Connector.RfcDestinationManager]::GetDestination($cfgParams) } #-Shows SAP GUI Scripting Parameters from Transaction Code RZ11——— Function Get-SAPGUIScriptingParams { $destination = Get-Destination $RfcReadTable = $destination.Repository.CreateFunction(“RFC_READ_TABLE”) $RfcParamInfo = $destination.Repository.CreateFunction(“PFL_GET_PARAMETER_INFO”) #$RfcParamChange = $destination.Repository.CreateFunction(“TH_CHANGE_PARAMETER”) $RfcParamChange = $destination.Repository.CreateFunction(“Z_TH_CHANGE_PARAMETER”) #-Get Parameter Attributes from SAP GUI Scripting——————— $RfcReadTable.SetValue(“QUERY_TABLE”, “TPFYPROPTY”) $RfcReadTable.SetValue(“DELIMITER”, “;”) [SAP.Middleware.Connector.IRfcTable]$Fields = $RfcReadTable.GetTable(“FIELDS”) $Fields.Append() $Fields.SetValue(“FIELDNAME”, “PARANAME”) #Profile parameter name $Fields.Append() $Fields.SetValue(“FIELDNAME”, “CHG”) #Flag for changes $Fields.Append() $Fields.SetValue(“FIELDNAME”, “DESCR”) #Short description $Fields.Append() $Fields.SetValue(“FIELDNAME”, “DYNAMIC”) #Param. can be changed dynamically [SAP.Middleware.Connector.IRfcTable]$Options = $RfcReadTable.GetTable(“OPTIONS”) $Options.Append() $Options.SetValue(“TEXT”, “PARANAME LIKE ‘sapgui/user_script%’”) $RfcReadTable.Invoke($destination) [SAP.Middleware.Connector.IRfcTable]$Table = $RfcReadTable.GetTable(“DATA”) ForEach ($Line In $Table) { [System.Array]$Data = $Line.GetValue(“WA”).Split(“;”) If ($Data[1] -ne “X” -or $Data[3] -ne “X”) { #Check if Param. can be changed Continue } $RfcParamInfo.SetValue(“PARNAME”, $Data[0]) $RfcParamInfo.SetValue(“PARTYPE”, “I”) $RfcParamInfo.Invoke($destination) [SAP.Middleware.Connector.IRfcStructure]$SubVal = ` $RfcParamInfo.GetStructure(“SUB_VAL”) Write-Host $SubVal.GetValue(“NAME”) $SubVal.GetValue(“USERVALUE”) ` $SubVal.GetValue(“DEFVALUE”) Switch ($SubVal.GetValue(“NAME”)) { “sapgui/user_scripting” { If ($SubVal.GetValue(“USERVALUE”) -ne “TRUE” -and ` $SubVal.GetValue(“DEFVALUE”) -ne “TRUE”) { $RfcParamChange.SetValue(“PARAMETER_NAME”, “sapgui/user_scripting”) $RfcParamChange.SetValue(“PARAMETER_VALUE”, “TRUE”) $RfcParamChange.Invoke($destination) } } { @(“sapgui/user_scripting_disable_recording”, “sapgui/user_scripting_force_notification”, “sapgui/user_scripting_per_user”, “sapgui/user_scripting_set_readonly”) -contains $_ } { If ($SubVal.GetValue(“USERVALUE”) -ne “FALSE” -and ` $SubVal.GetValue(“DEFVALUE”) -ne “FALSE”) { $RfcParamChange.SetValue(“PARAMETER_NAME”, $SubVal.GetValue(“NAME”)) $RfcParamChange.SetValue(“PARAMETER_VALUE”, “FALSE”) $RfcParamChange.Invoke($destination) } } } } } #-Main Function——————————————————— Function Main () { If ($PSVersionTable.PSVersion.Major -ge 5) { Load-NCo Get-SAPGUIScriptingParams } } #-Main—————————————————————— Main #-Error Routine——————————————————— Trap { [System.Reflection.Assembly]::LoadWithPartialName(“System.Windows.Forms”) > $Null [Void][System.Windows.Forms.MessageBox]::Show( ` $_.Exception.GetType().FullName + ` [System.Environment]::NewLine + ` “Error at line ” + $_.InvocationInfo.ScriptLineNumber + ` “ in ” + $_.InvocationInfo.ScriptName + ` [System.Environment]::NewLine + [System.Environment]::NewLine + ` $_.Exception.Message, “An Error Occurred”, 0) Exit } #-End——————————————————————-

Here the result:

Here the RFM wrapper for TH_CHANGE_PARAMETER: FUNCTION Z_TH_CHANGE_PARAMETER. *“———————————————————————- *”*“Lokale Schnittstelle: *” IMPORTING *“ VALUE(PARAMETER_NAME) LIKE TPFET-PARNAME *” VALUE(PARAMETER_VALUE) LIKE TPFET-PVALUE *“ VALUE(CHECK_PARAMETER) LIKE SY-INDEX DEFAULT 1 *” EXCEPTIONS *“ NOT_AUTHORIZED *” NOT_IN_SAME_SYSTEM *“ NOT_CHANGEABLE *” NOT_FOUND *“ INVALID_VALUE *” SHMPRF_ERROR *“ UNKNOWN_OPCODE *” LENGTH_EXCEEDED *“ UNKNOWN *”———————————————————————- CALL FUNCTION ‘TH_CHANGE_PARAMETER’ DESTINATION ‘NONE’ EXPORTING PARAMETER_NAME = PARAMETER_NAME PARAMETER_VALUE = PARAMETER_VALUE EXCEPTIONS NOT_AUTHORIZED = 1 NOT_IN_SAME_SYSTEM = 2 NOT_CHANGEABLE = 3 NOT_FOUND = 4 INVALID_VALUE = 5 SHMPRF_ERROR = 6 UNKNOWN_OPCODE = 7 LENGTH_EXCEEDED = 8 OTHERS = 9. CASE sy-subrc. WHEN 1. RAISE NOT_AUTHORIZED. WHEN 2. RAISE NOT_IN_SAME_SYSTEM. WHEN 3. RAISE NOT_CHANGEABLE. WHEN 4. RAISE NOT_FOUND. WHEN 5. RAISE INVALID_VALUE. WHEN 6. RAISE SHMPRF_ERROR. WHEN 7. RAISE UNKNOWN_OPCODE. WHEN 8. RAISE LENGTH_EXCEEDED. WHEN 9. RAISE UNKNOWN. ENDCASE. ENDFUNCTION.

On this way it is easy possible to check and to set the profile parameters for SAP GUI Scripting. Also this example is a good base to do the same with other profile parameters.

Enjoy it.

Cheers
Stefan http://bit.ly/2jUajJt #SAP #SAPCloud #AI