Copying path into variable
At least I think that's what I mean... Another very basic question!
My script is to set up a folder structure for jobs.
Basically I have:
set the_user to short user name of (system info)
(for which thanks, Michael)
then a lot of
make folder at folder "3 Artwork" of folder job_folder of folder "Desktop" of folder the_user of folder "Users" of startup disk with properties {name:"AW PDFs for Client"}
type instructions
I'd like to be able to tidy this up like:
set my_desktop to folder "Desktop" of folder the_user of folder "Users" of startup disk
- but this and variations on it don't seem to work. I have a hazy feeling the words 'a reference to' may need to appear somewhere, but haven't been able to make that work either!
I'm afraid this forum is making me lazy, but I'm up against time constraints here!
Hello Emma Glaisher,
Usually, the essential information you need to manipulate file/folder is its path information, e.g.
"Production:A:Argos:001122-Leaflet:"
All other things can be delived from it.
cf. pp.190-194
AppleScriptLanguageGuide.pdf
Note that 'folder A of folder B of folder C of disk D' sort of reference is 'Finder's reference form (Finder's object specfier) according to its AppleScript's object model and actually only used in 'Finder'. You don't have to bother with its lengthy form. Normally all you need is path string (or alias object associated to it).
* AppleScript's 'alias' is NOT Finder's 'alias file'. It's AppleScript's object of «class alis» that holds an 'alias record' for file system object. (Finder's 'alias file' is a file that contains an 'alias record' for its target object)
Also note that 'path string' may be plain string («class TEXT») or Unicode text («class utxt») in AppleScript terms. In some cases, you should be aware of the diffrence between them. (Possibly recent OSX's Finder may not coerce its item (folder/file/disk, etc) reference to plain string, but only to Unicode text. Just a guess)
Here's some sample code for you.
(Tested with OS9.1, not with OSX, sorry. I don't use OSX)
Hope it helps you to clear things up.
H
-- SCRIPT
(* 1. Path string *)
set node0 to "Production"
set node1 to "A"
set node2 to "Argos"
set node3 to "001122-Leaflet"
set fp to node0 & ":" & node1 & ":" & node2 & ":" & node3 & ":"
set fp to "Production:A:Argos:001122-Leaflet:" -- path string (= AppleScript's string object)
(* 2. Some basic forms for referring to file system object *)
set f_alias to fp as alias -- = AppleScript's alias object (# node fp must actually exist)
set f_fss to file fp as file specification -- = AppleScript's file specification object
-- return {fp, f_fss, f_alias} -- # uncomment this line to see what they are.
(* 3. Several ways to make new folder by Finder *)
-- (a) using Finder's item object
tell application "Finder"
-- (item fp) = Finder's item object
make new folder at (item fp) with properties {name:"3 Artwork"}
end tell
-- (b) using Finder's folder object, virtually identical to (a)
tell application "Finder"
-- (folder fp) = Finder's folder object
make new folder at (folder fp) with properties {name:"3 Artwork"}
end tell
-- (c) using AppleScript's alias
tell application "Finder"
-- (f_alias) = alias object given above
make new folder at (f_alias) with properties {name:"3 Artwork"}
end tell
-- (d) using AppleScript's file specification
tell application "Finder"
-- (f_fss) = file specification object given above
make new folder at (f_fss) with properties {name:"3 Artwork"}
end tell
-- END OF SCRIPT
Mac OS 9.1.x
Similar Messages
-
AppleScript Excel - Copy value of cells into variables
I am super new to AppleScript, so please excuse me if I am not good at explaining what I am trying to do. I have an Excel file that has 12 columns and X rows, I need to have B2/C2/D2/etc copied into variables but have the column be a variable instead of a static number so I can write a loop to get all the rows, etc. Here is what I have now, and I know this is far from being correct.
copy value of cell "B2" to varRow
I have tried something crazy like this:
copy value of column colSection of row intRow to varSection
But that just throws up an error saying the object i am trying to access does not exist. I set the ColSection to "B" and intRow to 2, so I thought it would work. Any ideas or advice I am open! Thanks!The following should give you the idea:
tell application "Microsoft Excel"
activate
make new workbook
set myCol to 3 -- the starting column
set myBgnRow to 2 -- the starting row
set myString to "Hello World" -- characters to be inserted into sheet as sample values
set myChar to 1 -- Points to first character ("H")
set myEndRow to myBgnRow + (length of myString) - 1 -- the ending row
-- Now put some values into the cells
repeat with myRow from myBgnRow to myEndRow
select (cell myCol of row myRow of active sheet)
tell cell myCol of row myRow
set value to character myChar of myString
end tell
set myChar to myChar + 1
end repeat
-- now get the values back out
-- note that this is using same myBgnRow and myEndRow as above
repeat with myRow from myBgnRow to myEndRow
select (cell myCol of row myRow of active sheet)
tell cell myCol of row myRow
set myVal to value
end tell
display dialog (myCol as text) & "," & (myRow as text) & " " & myVal
end repeat
end tell -
Copy and paste file path into bridge
I use bridge a lot! One of the most annoying things about bridge is that I can't paste a file path into bridge to browse to that file, on a network server, for example. I work at a graphics company, all our files are stored on servers with hundreds of folder levels, which makes it a huge pain to browse to manually.
I'll usually get a file path link that i can quickly paste into windows explorer to either open the file or browse to the folder it's in. With bridge i have to manually click through to the network folder.
This change would make a huge difference in usability for me.Paste your path into explorer then you can Right Click on the folder and select "Browse in Adobe Bridge CS5"
Edit:- you can paste the path directly into the top bar just click to the right of the path and it will allow you to paste your path in. -
Test-path where a directory in the path is variable
My company has a series of fax lines and associated file shares. Faxes are processed & then dropped off into these file shares. From that point a service runs about every 60 seconds to look for files in these directories to import into a database.
If there is a problem with the import then the service moves the file to a "HOLD" folder & files remain there until human intervention.
I am trying to create a script that will find the HOLD directory in each of these folders and look for the existence of files, then email a group of users alerting them if there are.
So there are several things I'm trying to accomplish.
1. Look for files in a path where a folder in the middle of the path is variable.
2. Send and email that will inform the recipient that there are files in the HOLD folder(s) and tell them WHICH ones
Here's what I am starting with but it isn't working as expected. There are files in at least one of these. I also thought to try using some kind of foreach loop but it's eluding me. Probably because it's late in the day for me.
$folder = get-content -Path "\\child.domain.com\netlogon\scripts\ps\numbers.txt"
if(Test-Path -Path "\\Server\scan import\fax\$folder\Hold" -include *.pdf, *.tif, *.jpg) {write-host "Files exist at $folder"} Else {write-host "No files in the hold folders"}
# When I wrote this script only God and I knew what I was doing. # Now, only God Knows!The numbers.txt includes a list of folder names, one per line. I did come up with the following and it's working, for my purposes, so I now need to figure out how to get the results into the body of a single email.
$parent = "\\server\scan import\fax\"
$folders = get-content -Path "\\child.domain.com\netlogon\scripts\ps\numbers.txt"
Foreach ($folder in $folders)
if(Test-Path -Path "$parent$folder\HOLD\*" -PathType leaf)
write-host "Files exist at $parent$folder\Hold"
Else
write-host "$folder Clear"
I'm really only using the Write-Host actions in place of the Send-MailMessage Cmdlet, at least I think that is the command I need.
# When I wrote this script only God and I knew what I was doing. # Now, only God Knows! -
Storing Uploaded Image Path into Mysql
Hi I am developing a cms and am using the code David gives in his book PHP Solutions, everything works fine but I can't work out how to extract the uploaded path so that it is stored in my table.
Help would be really appreciated, I am making good progress in learning the php especially with David's books but am still struggling when it comes to having to customized the code.
The code for the upload.php is as follows,
<?php
class Gp1_Upload{
protected $_uploaded = array();
protected $_destination;
protected $_max = 51200;
protected $_messages = array();
protected $_permitted = array('image/gif',
'image/jpeg',
'image/pjpeg',
'image/png');
protected $_renamed = false;
public function __construct($path) {
if (!is_dir($path) || !is_writable($path)) {
throw new Exception("$path must be a valid, writable directory.");
$this->_destination = $path;
$this->_uploaded = $_FILES;
public function getuploadpath (){
public function getMaxSize() {
return number_format($this->_max/1024, 1) . 'kB';
public function setMaxSize($num) {
if (!is_numeric($num)) {
throw new Exception("Maximum size must be a number.");
$this->_max = (int) $num;
public function move($overwrite = false) {
$field = current($this->_uploaded);
if (is_array($field['name'])) {
foreach ($field['name'] as $number => $filename) {
// process multiple upload
$this->_renamed = false;
$this->processFile($filename, $field['error'][$number], $field['size'][$number], $field['type'][$number], $field['tmp_name'][$number], $overwrite);
} else {
$this->processFile($field['name'], $field['error'], $field['size'], $field['type'], $field['tmp_name'], $overwrite);
public function getMessages() {
return $this->_messages;
protected function checkError($filename, $error) {
switch ($error) {
case 0:
return true;
case 1:
case 2:
$this->_messages[] = "$filename exceeds maximum size: " . $this->getMaxSize();
return true;
case 3:
$this->_messages[] = "Error uploading $filename. Please try again.";
return false;
case 4:
$this->_messages[] = 'No file selected.';
return false;
default:
$this->_messages[] = "System error uploading $filename. Contact webmaster.";
return false;
protected function checkSize($filename, $size) {
if ($size == 0) {
return false;
} elseif ($size > $this->_max) {
$this->_messages[] = "$filename exceeds maximum size: " . $this->getMaxSize();
return false;
} else {
return true;
protected function checkType($filename, $type) {
if (empty($type)) {
return false;
} elseif (!in_array($type, $this->_permitted)) {
$this->_messages[] = "$filename is not a permitted type of file.";
return false;
} else {
return true;
public function addPermittedTypes($types) {
$types = (array) $types;
$this->isValidMime($types);
$this->_permitted = array_merge($this->_permitted, $types);
protected function isValidMime($types) {
$alsoValid = array('image/tiff',
'application/pdf',
'text/plain',
'text/rtf');
$valid = array_merge($this->_permitted, $alsoValid);
foreach ($types as $type) {
if (!in_array($type, $valid)) {
throw new Exception("$type is not a permitted MIME type");
protected function checkName($name, $overwrite) {
$nospaces = str_replace(' ', '_', $name);
if ($nospaces != $name) {
$this->_renamed = true;
if (!$overwrite) {
$existing = scandir($this->_destination);
if (in_array($nospaces, $existing)) {
$dot = strrpos($nospaces, '.');
if ($dot) {
$base = substr($nospaces, 0, $dot);
$extension = substr($nospaces, $dot);
} else {
$base = $nospaces;
$extension = '';
$i = 1;
do {
$nospaces = $base . '_' . $i++ . $extension;
} while (in_array($nospaces, $existing));
$this->_renamed = true;
return $nospaces;
protected function processFile($filename, $error, $size, $type, $tmp_name, $overwrite) {
$OK = $this->checkError($filename, $error);
if ($OK) {
$sizeOK = $this->checkSize($filename, $size);
$typeOK = $this->checkType($filename, $type);
if ($sizeOK && $typeOK) {
$name = $this->checkName($filename, $overwrite);
$success = move_uploaded_file($tmp_name, $this->_destination . $name);
if ($success) {
$message = "$filename uploaded successfully";
if ($this->_renamed) {
$message .= " and renamed $name";
$this->_messages[] = $message;
} else {
$this->_messages[] = "Could not upload $filename";
?>
The code for my form page is this
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<?php
//THE FOLLOWING CODE IS FOR THE UPLOADING OF IMAGES AND FILES
// set the max upload size in bytes
$max = 51200;
if (isset ($_POST ['submit']))
//define the path to the upload folder
$destination = 'uploads/';
require_once('classes/Upload.php');
try {
$upload = new Gp1_Upload($destination);
$upload->setMaxSize($max);
$upload->move();
$result = $upload->getMessages();
} catch (Exception $e) {
echo $e->getMessage();
// END OF UPLOADING OF IMAGES AND FILES
?>
<form id="newvenue" action="" method="post" enctype="multipart/form-data" >
<?php
// THIS CODE DISPLAYS ERROR MESSAGES FOR THE FILE UPLOADS
if (isset($result)){
echo '<ul>';
foreach ($result as $message){
echo "<li>$message</li>";
echo '</ul>';
?>
<table id="neweventdisplay" cellpadding="5" border="0">
<tr>
<td></td>
<td><input type="hidden" name="user_id" value="" /></td>
</tr>
<tr>
<td></td>
<td>Organisers Name</td>
<td><input class="input80px" id="org_name" name="org_name" type="text" /> </td>
</tr>
<tr>
<td></td>
<td><label for="image">Upload image:</label></td>
<td><p>
<input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $max; ?>" />
<input type="file" name="image" id="image" />
</p></td>
</tr>
<tr>
<td></td>
<td>Details about your upload</td>
<td><input class="input80px" id="org_uploadcapt" name="org_uploadcapt" type="text" /></td>
</tr>
<tr>
<td></td>
<td><input type="submit" name="submit" id="submit" value="upload"></td>
</tr>
<tr>
<td class="heading"> </td>
<td></td>
</tr>
</table>
</form>
<prep>
<?php
if (isset ($_POST ['submit'])){
print_r($_FILES);}
?>
</prep>
</body>
</html>Hi David
Thank you very much for your help. I had continued to work on the code and had worked out how to input the image path into the database but it was using the original filename, so when every it is changed it did not work. The code in my page at that point was the following,
<?php // 2. NEW USER REGISTRATION<br />
include_once ("includes/form_functions.inc.php");
$max = 100000;
$destination = 'uploads/';
// START FORM PROCESSING FOR A NEW REGISTRATION
if (isset($_POST['submit'])) { // Form has been submitted.
$errors = array();
// perform validations on the form data
$required_fields = array('org_name');
$errors = array_merge($errors, check_required_fields($required_fields, $_POST));
$required_numberfields = array('user_id');
$errors = array_merge($errors, check_number_fields($required_numberfields, $_POST));
$fields_with_lengths = array('org_name' => 36, 'org_website' => 100, 'org_contact' => 40, 'org_conemail' => 80, 'org_contel' => 30);
$errors = array_merge($errors, check_max_field_lengths($fields_with_lengths, $_POST));
/*Here I am using trim as well as ucwords, this function converts the first letter of each work into a capital letter, I am using this only on the
firstname and surname to ensure that the data is how I want it as it is going into the database, The better the data is preformated the better the data
swill be within the database.*/
$org_name = trim(strtolower(mysql_prep($_POST['org_name'])));
$org_website = trim(strtolower(mysql_prep($_POST['org_website'])));
$org_contact = trim(strtolower (mysql_prep($_POST['org_contact'])));
$org_conemail = trim(strtolower (mysql_prep($_POST['org_conemail'])));
$org_contel = strtolower (mysql_prep($_POST['org_contel']));
$userid = $_POST['user_id'];
$org_uploadcapt = $_POST['org_uploadcapt'];
$image = $_FILES['image'];
/*Here is the code that takes the variable captured from the input form and matches it up with the appropriate field in the database. An important point with insertion is that the variables are in the same order as the mysql field names, there will be an error if the number of variables does not match the number of field names. Note that there is no entry for the user id as this is an auto increment file within mysql and so is not needed to be entered*/
if ( empty($errors) ) {
$sql = "INSERT INTO organiser
(org_name, org_website, org_contact, org_conemail, org_contel, user_id, org_uploadurl, org_uploadcapt)
VALUES
('{$org_name}', '{$org_website}', '{$org_contact}', '{$org_conemail}', '{$org_contel}', '{$userid}', '{$destination}".$image['name']."', '{$org_uploadcapt}' )";
$result = mysql_query($sql, $connection);
if ($result) {
$message = "The organiser was successfully created.<br />";
} else {
$message = "I am sorry but the organiser could not be added.";
$message .= "<br />" . mysql_error();
} else {
/* this counts the number of errors and informs the user of how many fields were
incorrectly entered*/
if (count($errors) == 1) {
$message = "There was 1 error in the form.";
} else {
$message = "There were " . count($errors) . " errors in the form.";
} else { // Form has not been submitted.
$org_name = "";
$org_website = "";
$org_contact = "";
$org_conemail = "";
$org_contel = "";
$userid = "";
$org_uploadcapt = "";
//THE FOLLOWING CODE IS FOR THE UPLOADING OF IMAGES AND FILES
// set the max upload size in bytes
if (isset ($_POST ['submit']))
//define the path to the upload folder
// Use This On The Local Hosting Machine
//$destination = 'C:/upload_test/';
// Use This On The Live Server
require_once('classes/Upload.php');
try {
$upload = new Gp1_Upload($destination);
$upload->setMaxSize($max);
$upload->move();
$result = $upload->getMessages();
} catch (Exception $e) {
echo $e->getMessage();
// END OF UPLOADING OF IMAGES AND FILES
?>
<title>Horse Events</title>
<?php include_once("includes/meta.inc.php");?>
<?php include_once("includes/cssfavgoogle.inc.php");?>
<link href="css/adminpanel.css" rel="stylesheet" type="text/css" />
<style>
input[type="number"] {
width:40px;
</style>
</head>
<body>
<div id="wrapper">
<div id="admincontent">
<form id="newvenue" action="neworganiser.php" method="post" enctype="multipart/form-data" >
<?php if (!empty ($message)) {echo "<p class=\"message\">" . $message . "</p>";} ?>
<?php if (!empty ($errors)) {display_errors($errors); } ?>
<?php
// THIS CODE DISPLAYS ERROR MESSAGES FOR THE FILE UPLOADS
if (isset($result)){
echo '<ul>';
foreach ($result as $message){
echo "<li>$message</li>";
echo '</ul>';
?>
<br />
<table id="neweventdisplay" cellpadding="5" border="0">
<tr>
<td></td>
<td><input type="hidden" name="user_id" value="<?php echo $url_userid ['user_id']; ?>" /></td>
</tr>
<tr>
<td> <span class="compuls">*</span></td>
<td>Organisers Name</td>
<td><input class="input80px" id="org_name" name="org_name" type="text" />
</td>
</tr>
<tr>
<td><span class="compuls">*</span></td>
<td>Their Website</td>
<td><input class="input80px" id="org_website" name="org_website" type="text" /></td>
</tr>
<tr>
<td><span class="compuls">*</span></td>
<td>Organisers Contact</td>
<td><input id="org_contact" name="org_contact" type="text" />eg: Mrs Jean Kelly</td>
</tr>
<tr>
<td><span class="compuls">*</span></td>
<td>Contact Email</td>
<td><input class="input80px" id="org_conemail" name="org_conemail" type="text" />
</td>
</tr>
<tr>
<td><span class="compuls">*</span></td>
<td>Contact Tel No.</td>
<td><input id="org_contel" name="org_contel" type="text" /></td>
</tr>
<tr>
<td></td>
<td><label for="image">Upload image:</label></td>
<td><p>
<input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $max; ?>" />
<input type="file" name="image" id="image" />
</p></td>
</tr>
<tr>
<td></td>
<td>Details about your upload</td>
<td><input class="input80px" id="org_uploadcapt" name="org_uploadcapt" type="text" /></td>
</tr>
<tr>
<td></td>
<td><input type="submit" name="submit" id="submit" value="Add Your Organiser"></td>
</tr>
<tr>
<td class="heading"> </td>
<td></td>
</tr>
</table>
<a class="delete" href="controlpanel.php">Cancel</a>
</form>
</div>
I have added the code you kindly forwarded but am getting an error, I am still trying to learn the basics of php and am unsure of what to do next, my php Upload.php now looks like
<?php
class Gp1_Upload{
protected $_uploaded = array();
protected $_destination;
protected $_max = 100000;
protected $_messages = array();
protected $_permitted = array('image/gif',
'image/jpeg',
'image/pjpeg',
'image/png');
protected $_renamed = false;
protected $_filenames = array();
public function __construct($path) {
if (!is_dir($path) || !is_writable($path)) {
throw new Exception("$path must be a valid, writable directory.");
$this->_destination = $path;
$this->_uploaded = $_FILES;
public function getMaxSize() {
return number_format($this->_max/100000, 1) . 'kB';
public function setMaxSize($num) {
if (!is_numeric($num)) {
throw new Exception("Maximum size must be a number.");
$this->_max = (int) $num;
public function move($overwrite = false) {
$field = current($this->_uploaded);
if (is_array($field['name'])) {
foreach ($field['name'] as $number => $filename) {
// process multiple upload
$this->_renamed = false;
$this->processFile($filename, $field['error'][$number], $field['size'][$number], $field['type'][$number], $field['tmp_name'][$number], $overwrite);
} else {
$this->processFile($field['name'], $field['error'], $field['size'], $field['type'], $field['tmp_name'], $overwrite);
public function getMessages() {
return $this->_messages;
protected function checkError($filename, $error) {
switch ($error) {
case 0:
return true;
case 1:
case 2:
$this->_messages[] = "$filename exceeds maximum size: " . $this->getMaxSize();
return true;
case 3:
$this->_messages[] = "Error uploading $filename. Please try again.";
return false;
case 4:
$this->_messages[] = 'No file selected.';
return false;
default:
$this->_messages[] = "System error uploading $filename. Contact webmaster.";
return false;
protected function checkSize($filename, $size) {
if ($size == 0) {
return false;
} elseif ($size > $this->_max) {
$this->_messages[] = "$filename exceeds maximum size: " . $this->getMaxSize();
return false;
} else {
return true;
protected function checkType($filename, $type) {
if (empty($type)) {
return false;
} elseif (!in_array($type, $this->_permitted)) {
$this->_messages[] = "$filename is not a permitted type of file.";
return false;
} else {
return true;
public function addPermittedTypes($types) {
$types = (array) $types;
$this->isValidMime($types);
$this->_permitted = array_merge($this->_permitted, $types);
protected function isValidMime($types) {
$alsoValid = array('image/tiff',
'application/pdf',
'text/plain',
'text/rtf');
$valid = array_merge($this->_permitted, $alsoValid);
foreach ($types as $type) {
if (!in_array($type, $valid)) {
throw new Exception("$type is not a permitted MIME type");
protected function checkName($name, $overwrite) {
$nospaces = str_replace(' ', '_', $name);
if ($nospaces != $name) {
$this->_renamed = true;
if (!$overwrite) {
$existing = scandir($this->_destination);
if (in_array($nospaces, $existing)) {
$dot = strrpos($nospaces, '.');
if ($dot) {
$base = substr($nospaces, 0, $dot);
$extension = substr($nospaces, $dot);
} else {
$base = $nospaces;
$extension = '';
$i = 1;
do {
$nospaces = $base . '_' . $i++ . $extension;
} while (in_array($nospaces, $existing));
$this->_renamed = true;
return $nospaces;
protected function processFile($filename, $error, $size, $type, $tmp_name, $overwrite) {
$OK = $this->checkError($filename, $error);
if ($OK) {
$sizeOK = $this->checkSize($filename, $size);
$typeOK = $this->checkType($filename, $type);
if ($sizeOK && $typeOK) {
$name = $this->checkName($filename, $overwrite);
$success = move_uploaded_file($tmp_name, $this->_destination . $name);
if ($success) {
$message = "$filename uploaded successfully";
if ($this->_renamed) {
$message .= " and renamed $name";
$this->_messages[] = $message;
} else {
$this->_messages[] = "Could not upload $filename";
public getFilenames() {
return $this->_filenames;
?>
The error is Parse error: syntax error, unexpected T_STRING, expecting T_VARIABLE.
I have not worked with oop before and have only very briefly looked at the principle was on my foundation degree. -
About Replacement Path, Text Variables & Cusomer Exit?
Hi
Please explain along with examples youwhen we use Replacement Path
Text Variables and
Customer Exit
Please search the forum before posting a thread
Edited by: Pravender on Apr 18, 2011 3:48 PMHi,
1. Customer EXIT :
Business Scenario:
The business department wants to check if the orders from the customers for a certain week (e.g. 6 weeks from now) are already transmitted into their system. Therefore they run a report with a variable, that is calculated automatically.
Note: Of course this is not the only suitable solution, but it will show you how the exit works.
Step by Step Solution:
A.You should create a variable on the info object 0CALWEEK like this:
1.Technical Name: WS_FWEEK
2.Description: Workshop Future Week
3 Interval
5.Mandatory variable entry
6.Processing: Customer Exit
7.NOT ready for input
B.Call transaction CMOD for the definition of the customer exit.
C.Create a new project, maintain the short text and assign a development class.
D.Go to Enhancement Assignments and assign RSR00001. Press the button components to continue.
E.Double-click on EXIT_SAPLRRS0_001.
F.For documentation place the cursor an RSR00001 and use the menu GoTo => Display documentation.
G.Then double-click on ZXRSRU01.
H. If the include does not exist, you have to create it; assign a development class and a transport request
Enter this code:
INCLUDE ZXRSRU01 *
data: l_idx like sy-tabix,
workdate(8) type d,
futureweek(6) type c.
DATA: L_S_RANGE TYPE RSR_S_RAGESID.
case I_vnam.
when u2018WS_FWEEKu2019.
if i_step = 2 u201C after pop-up
Calculate Current day plus 6 weeks:
workdate = sy-datum + 42 .
Calculate the week of this day
CALL FUNCTION 'DATE_GET_WEEK'
EXPORTING
DATE = workdate
IMPORTING
WEEK = futureweek
EXCEPTIONS
DATE_INVALID = 1
OTHERS = 2
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
l_s_range-low = futureweek.
l_s_range-high =
l_s_range-sign = 'I'.
l_s_range-option = 'EQ'.
append l_s_range to l_t_range.
p_subrc = 0.
ENDIF.
ENDCASE.
I.Save and activate the codie
J.Activate the project. (Very important!)
K. Define a query using the above created variable.
L.For displaying the variable values in the executed query you also may define two text variables. These should, if necessary, be able to show the lower and the upper value calculated by the customer exit.
2 Replacement Path :
Example for filling variable values depending on an other variable /
Deriving one variable value from another variable
Business scenario.
A query should show in one column the value for one period. The period should be entered by the user. In the second column the accumulated vale from the beginning of the year to the period of the first column should be displayed. The InfoCube contains only the InfoObject 0CALMONTH (Month/Year) and not single InfoObjects for period and year.
Solution:
For this scenario we need four variables: two variables for the column text and two variables for the period values. One of these period variables is defined as a variable with a customer exit
Step by Step Solution:
Create an input variable u201CMONTHu201D (you need this specific information for the coding example below). The variable is based on the InfoObject 0CALMONTH. Set the following attributes:
Single Value
Ready for input
Mandatory variable entry
Create a variable u201CCUMMONTHu201D (you need this specific information for the coding example below) with a customer exit as a processing type. The variable is based on the InfoObject 0CALMONTH. Set the following attributes:
Interval
NOT ready for input!
Mandatory variable entry
Create two text variables. Both variables use the u201CReplacement Pathu201D as processing type. The first text variable is filled with the text from the u201Cfrom valueu201D. The second is filled with the text from the u201Cto valueu201D.
Enter this code
INCLUDE ZXRSRU01 *
DATA: L_S_RANGE TYPE RSR_S_RAGESID.
DATA: LOC_VAR_RANGE LIKE RRRANGEEXIT.
case I_vnam.
when u2018CUMMONTHu2019.
if i_step = 2 u201C after pop-up
LOOP AT I_T_VAR_RANGE INTO LOC_VAR_RANGE
WHERE VNAM = u2018MONTHu2019.
CLEAR L_S_RANGE.
l_t_range-low = loc_var_range(4). u201Cgetting current year
l_t_range-low+4(2) = u201801u2019 u201Csetting 1st period in cur. year
l_t_range-high = loc_var_range-low u201Chigh value=input value
l_t_range-sign = 'I'.
l_t_range-option = 'BT'.
append l_s_range to e_t_range.
exit.
endloop.
endif.
endcase.
Save and activate the code.
Activate the project.
Define a query containing all the variables.
Regards
CSM Reddy -
Importing a path into photoshop
I created a path in Photoshop CS6 and exported it as a "Paths to Illustrator" vector file to the desktop. Now I want to import the path into another PS file. How do I do this?
I cannot copy and paste the path as I no longer have the original file that was used to create the path. This seems to be a simple task that I'm sure used to be easily done by importing the path in older versions of PS.
ThxPhotoshop Is not a file editor. You can add path to a photoshop document several ways. When you have the path in one open document you can Create a custom shape and then use the shape path in any document using the custom shape tool. You can drag a path for one document's path palette and drop it onto an other open document. You can insert the path into an action step and that step will inset the path into documents the action is used on. You can save custom shapes and action with insert path steps a copy the saved file onto other machines and load them into Photoshop.. When you save Open documents that have path some file formats support paths and will save paths in the saved image file. When those file are opened in Photoshop the path will be in the open documents paths palette.
I have never used illustrator however if you have the AI file and illustrator there may be a way to open the .AI file in illustrator export the path to Photoshop, It may have an export path to Photoshop or perhaps you can drag and drop between applications. However I don't know all I know is Photoshop has a menu File>Export Path to Illustrator. However the is no menu File>Import Paths from illustrator. When I use menu File>Export Path To Illustrator Photoshop saves a *.ai file. If I drop the file on Photoshop Photoshop want to open it a s rasterized ESP document in CMYKt and there is no Path in the paths palette. -
ForEach Loop - Parsing XML subgroup into Variables
Hi all,I am designing a new ETL process using SSAS.
We have a controller package which receives an XML string at run time into a variable called BatchRequest :-
<Batch>
<Request>
<Name>Filemon</Name>
<Params>
<filepaths>
<Sourcepath>d:\temp</Sourcepath>
<Destpath>D:\temp2</Destpath>
<Archivename>\Archive</Archivename>
</filepaths>
</Params>
</Request>
</Batch>
The Batch can contain a number of Requests and a ForEach Loop is used to parse the text for the Name node and the text for the Params Node into variables RequestName and RequestParams respectively.
however, what I want to be able to do is to take the text for <name> into Requestname but take the entire XML sub string for <Params> into RequestParams.
At the moment I get the text only (e.g. d:\tempd:\temp2\Archive).
The Requestname is used by an XML task within the ForEach loop to retrieve full package path details from an external config file, and hence it only needs to be a keyword.
I played with the idea of including <Params> as a subnode for <Name>, only populating RequestName in the loop parser and then having an XML task which would parse the related parameter string, but i don't know how to tell the XML task that I
want the parameter string where the <Name> is Filemon (in this example).
Can anyone give me some suggestions or pointers?
Thanks
Iain
IainHi idcowden,
Glad to hear that you have resolved the issue on your own. Thank you for sharing the solution.
Regards,
Mike Yin
TechNet Community Support -
Error Message:PRVF-3929 - PATH environment variable.
Hello,
I am trying to install Oracle on my laptop and getting the following error message resulting into hault of installation.
INFO: *********************************************
INFO: Environment variable: "PATH": This test checks whether the length of the environment variable "PATH" does not exceed the recommended length.
INFO: Severity:CRITICAL
INFO: OverallStatus:VERIFICATION_FAILED
INFO: -----------------------------------------------
INFO: Verification Result for Node:Indrajit-PC
INFO: Expected Value:1023
INFO: Actual Value:1159
INFO: Error Message:PRVF-3929 : Adding the Oracle binary location to the PATH environment variable will exceed the OS length limit of [ "1023" ] for the variable on the node "Indrajit-PC"
INFO: Cause: The installer needs to update the PATH environment variable to include the value "%ORACLE_HOME%/bin;".
However, doing so will cause PATH to exceed the maximum allowable length that this operating system allows.
INFO: Action: Ensure that the sum of the lengths of your current PATH environment variable and that of
"%ORACLE_HOME%/bin;" does not exceed the operating system limit.
Restart the installer after correcting the setting for environment variable.
Oracle Database Trying ton install - win64_11gR2
MY PC CONFIGURATION:
- Windows 7
- 64 bit
Can you please help me getting this solved please.C:\>Set
ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\Indrajit\AppData\Roaming
asl.log=Destination=file
CLASSPATH=.;C:\Program Files (x86)\Java\jre6\lib\ext\QTJava.zip
CommonProgramFiles=C:\Program Files\Common Files
CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
CommonProgramW6432=C:\Program Files\Common Files
COMPUTERNAME=INDRAJIT-PC
ComSpec=C:\Windows\system32\cmd.exe
COPLIB=C:\Program Files (x86)\Teradata\Client\13.0\CLIv2\
DataConnectorLibPath=C:\Program Files (x86)\Teradata\Client\13.0\bin
FP_NO_HOST_CHECK=NO
HOMEDRIVE=C:
HOMEPATH=\Users\Indrajit
JAVA_HOME=C:\Program Files\Java\jdk1.7.0
LOCALAPPDATA=C:\Users\Indrajit\AppData\Local
localtd=1
LOGONSERVER=\\INDRAJIT-PC
NUMBER_OF_PROCESSORS=4
OS=Windows_NT
Path=C:\Program Files (x86)\AXSMOD;C:\Program Files (x86)\Teradata\Client\13.0\A
XSMOD\;C:\Program Files (x86)\Teradata\Client\13.0\bin;C:\Program Files (x86)\Te
radata\Client\13.0\bin;C:\Program Files (x86)\Teradata\Client\13.0\CLIv2\;C:\Pro
gram Files (x86)\Teradata\Client\13.0\ODBC Driver for Teradata\Lib;C:\Program Fi
les\Common Files\Microsoft Shared\Windows Live;C:\Program Files (x86)\Common Fil
es\Microsoft Shared\Windows Live;C:\Windows\system32;C:\Windows;C:\Windows\Syste
m32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;c:\Program Files (x86)\ATI
Technologies\ATI.ACE\Core-Static;c:\Program Files\WIDCOMM\Bluetooth Software\;c:
\Program Files\WIDCOMM\Bluetooth Software\syswow64;;C:\Program Files\Dell\DW WLA
N Card\Driver;C:\Program Files (x86)\Windows Live\Shared;C:\Program Files (x86)\
QuickTime\QTSystem\;C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;
C:\Program Files\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft
SQL Server\100\DTS\Binn\;C:\Program Files\Java\jdk1.7.0\bin;C:\Program Files (x
86)\Common Files\Roxio Shared\DLLShared\;C:\Program Files (x86)\Teradata\Client\
13.0\Shared ICU Libraries for Teradata\lib\;C:\Program Files (x86)\AXSMOD;
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
PROCESSOR_ARCHITECTURE=AMD64
PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 37 Stepping 5, GenuineIntel
PROCESSOR_LEVEL=6
PROCESSOR_REVISION=2505
ProgramData=C:\ProgramData
ProgramFiles=C:\Program Files
ProgramFiles(x86)=C:\Program Files (x86)
ProgramW6432=C:\Program Files
PROMPT=$P$G
PSModulePath=C:\Windows\system32\WindowsPowerShell\v1.0\Modules\
PUBLIC=C:\Users\Public
QTJAVA=C:\Program Files (x86)\Java\jre6\lib\ext\QTJava.zip
SESSIONNAME=Console
SystemDrive=C:
SystemRoot=C:\Windows
TEMP=C:\Users\Indrajit\AppData\Local\Temp
TMP=C:\Users\Indrajit\AppData\Local\Temp
USERDOMAIN=Indrajit-PC
USERNAME=Indrajit
USERPROFILE=C:\Users\Indrajit
windir=C:\Windows -
Hi,
Problem Description:
After installing my new product version, when user does log-off and log in again into admin account
or switch from admin account to non-admin account, PATH environment variable shows incorrect path of my product (previous product version’s path) using command prompt.
It seems windows refresh issue during session changes (log off and log in / switch from Admin to
Non-admin account).
Why PATH environment variable is not refresh immediately after log off and log in again or Switch
from admin to non-admin mode?.
Please see my thread for more details http://social.msdn.microsoft.com/Forums/vstudio/en-US/445ab42c-bdff-405a-8d53-558e1b6c7d34/path-environment-variable-issue-when-user-logoff-and-login-or-switch-from-admin-to-nonadmin?forum=windowsgeneraldevelopmentissues
Also submitted bug for this in connect.microsoft.com portal.In that it has lots of information
like problem statement, Reproduction steps and Expected Results.
Bug ID: 871782
Could you please any body help me for this?. your support will be appreciated.
Thanks,
MarichamyWhy PATH environment variable is not refresh immediately after log off and log in again or Switch
from admin to non-admin mode?.
I wouldn't have any expectation of what you are doing to work the way you expect. E.g. why is the %ABC% being replaced at all? There is some help about this ambiguous scenario in the cmd help...
/V:ON Enable delayed environment variable expansion using ! as the
delimiter. For example, /V:ON would allow !var! to expand the
variable var at execution time. The var syntax expands variables
at input time, which is quite a different thing when inside of a FOR
loop.
/V:OFF Disable delayed environment expansion.
So, what's the setting for the /V: switch that your users would be using? Perhaps you should be using the ! instead of the % for your ABC variable?
Oh. There's more below where I found that...
Delayed environment variable expansion is NOT enabled by default. You
can enable or disable delayed environment variable expansion for a
particular invocation of CMD.EXE with the /V:ON or /V:OFF switch. You
can enable or disable delayed expansion for all invocations of CMD.EXE on a
machine and/or user logon session by setting either or both of the
following REG_DWORD values in the registry using REGEDIT.EXE:
HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\DelayedExpansion
and/or
HKEY_CURRENT_USER\Software\Microsoft\Command Processor\DelayedExpansion
to either 0x1 or 0x0. The user specific setting takes precedence over
the machine setting. The command line switches take precedence over the
registry settings.
In a batch file the SETLOCAL ENABLEDELAYEDEXPANSION or DISABLEDELAYEDEXPANSION
arguments takes precedence over the /V:ON or /V:OFF switch. See SETLOCAL /?
for details.
If delayed environment variable expansion is enabled, then the exclamation
character can be used to substitute the value of an environment variable
at execution time.
So, I guess the essence of your "bug" will boil down to whether you
need the feature to get the result you want and the
truth of that first sentence but it certainly looks like a "can of worms" to me. ; )
HTH
Robert Aldwinckle -
Hi, on my last PC when transferring music to my new MacBook Pro i noticed i had about 6 duplicated of each song in every album i took hours in removing them.
I Just wondered Does iTunes store the original music file and then copy it into a separate folder?
If i delete the original file from finder will it remove it from my iTunes library or vice versa. I didnt want to lose any music like i have some how managed to on my old computer.
Or should i keep both files of it in the Music folder and also iTunes library folder?
Which is best ?DrewPowell wrote:
I Just wondered Does iTunes store the original music file and then copy it into a separate folder?
It does both at the same time.
When you add files to iTunes, it copies them into /Music/iTunes/iTunes media/ folder. The original file remains where it was.
You can drag a file to /Music/iTunes/iTunes media/Automatically add to iTunes/ folder.
This will add to iTunes and move it to /Music/iTunes/iTunes media/.
I keep a shortcut of this folder on my desktop then simply drag files to the shortcut to add to iTunes.
Then there are no "extra" files around. -
Please Help! After downloading an album and dragging it into itunes I end up having multiple copies of the album on my hard drive. I do have (under Itunes preferences, advanced) copy songs into itunes library "checked". I'm sure this is the reason for the multiple copies. When I try to delete one of the copies of the album and go back to itunes and try playing a song, I get a red exclamtion point next to the song with an error message saying itunes cannot locate file. My questions are, Does Itunes literally make a copy of the song? If so , How do you know which file to delete?
Sony's own entertainment software on the Vaio plays merry **** with iTunes, worse there's no telling when it will kick in.
First head over to the Sony Vaio site and get the update for the software, that will stop it from messing with the iTunes database/library files when you connect your iPod.
http://support.apple.com/kb/TS2715
http://esupport.sony.com/US/perl/swu-download.pl?mdl=VGNP588EQ&updid=4526&osid=28
With that stopped you can add the music back without fear of this happening again. -
Need some clarification on Replacement Path with Variable
Hello Experts,
Need some clarification on Replacement Path with Variable.
We have 2 options with replacement path for characteristic variables i.e.
1) Replace with query
2) Replace with variable.
Now, when we use "Replace with variable" we give the variable name. Then we get a list for "Replace with" as follows:
1) Key
2) External Characteristic Value Key
3)Label
4)Attribute value.
I need detailed explanation for the above mentioned 4 options with scenarios.
Thanks in advance.
Regards
LavanyaHi Lavanya,
Please go through the below link.
http://help.sap.com/saphelp_nw70/helpdata/EN/a4/1be541f321c717e10000000a155106/frameset.htm
Hope this gives you complete and detailed explaination.
Regards,
Reddy -
I deleted all my playlists provided. However, they are still on my Ipod Touch. Now, when I sync my Ipod with Itunes then the lists are copied back into Itunes?
A playlist takes up almost no room. A few kB at most.
It is simply a list of songs in the library
Do you want the playlists or not?
Now, when I sync my Ipod with Itunes then the lists are copied backinto iTunes?
Do you want them copied back into iTunes? -
Copy & Paste into Google Maps no longer works after 4.2 update
Anyone else seem to be getting this problem? Copy and paste into Google maps was extremely useful. Now this doesn't seem to work for me after updating to 4.2.
1. Copy something into the clipboard (doesn't matter what it is)
2. Open Google maps
3. Try to paste into the search bar. You don't get the paste option.
4. Try to type something into the search bar then attempt to copy what you just typed. No options appear to copy what was just typed in.
This used to work prior to the 4.2 update. Very useful when receiving incomplete addresses via text message or from a web page.
Maybe you are looking for
-
Change in validity period of Scheduling agreement
Dear all, I extended validity period of existing Scheduling agreement, But In MD04 it is not creating Schedule lines. Regards, Nitin Patil.
-
Removing some chapters and cross-reference formats in the conversion
Hi everyone! I am using Frame and RH to single source creating PDFs and online help. I create the PDFs from FrameMaker, and Webhelp from RH. I use the RH linking functionality. Is there any way to exclude some FM chapters from being converted, withou
-
I had to remove 4Loot because of an issue. When I try to reload it now I can't. The program points to the bar at the top of the browser, but unlike Google Chrome where there's a tier of three bars to click on and load 4Loot search engine...there's no
-
I've created a lens profile today for theVivitar SMS 28mm 2.8 MC CloseFocusWideAngle C/FD on a Canon 60D using the Fotodiox adapter. I sent it to Adobe for posting publicly. If anyone would like to download it in the meantime you can find it here:
-
Swiffy Problem on Safari for IPad
I just finished an HTML5 site which was done using Flash CS6 / Swiffy extension to convert to html 5. Site looks great all links work on desktop browsers but in Safari on IPad I get the "operation could not be completed" message. The site validates